Как читать числа из java-файла
Обновлено: 21.11.2024
Значительное количество программного обеспечения так или иначе основано на обработке данных. Программное обеспечение, созданное для воспроизведения музыки, обрабатывает музыкальные файлы, а программное обеспечение, созданное для обработки изображений, обрабатывает файлы изображений. Приложения, работающие в Интернете и на мобильных устройствах, такие как Facebook, WhatsApp и Telegram, обрабатывают информацию о пользователях, хранящуюся в файловых базах данных. Их всех объединяет то, что они так или иначе считывают данные и манипулируют ими. Кроме того, обрабатываемые данные в конечном итоге сохраняются в каком-либо формате в одном или нескольких файлах.
Чтение с клавиатуры
С самого начала этого курса мы использовали класс Scanner для чтения пользовательского ввода. Блок, в котором считываются данные, представляет собой цикл while-true, в котором чтение заканчивается на определенном входе.
В приведенном выше примере мы передаем системный ввод ( System.in ) в качестве параметра конструктору класса Scanner. В текстовых пользовательских интерфейсах ввод пользователя направляется во входной поток по одной строке за раз, что означает, что информация отправляется для обработки каждый раз, когда пользователь вводит новую строку.
Введенные пользователем данные считываются в виде строки. Например, если бы мы хотели обрабатывать входные данные как целые числа, нам пришлось бы преобразовать их в другую форму. Ниже приведен пример программы - она считывает ввод от пользователя до тех пор, пока пользователь не введет "конец". Пока пользовательский ввод не «конец», ввод обрабатывается как целое число — в этом случае число просто печатается.
Файлы и файловая система
Файлы — это наборы данных, хранящиеся на компьютерах. Эти файлы могут содержать, среди прочего, текст, изображения, музыку или любую их комбинацию. Формат файла определяет содержимое файла, а также программу, необходимую для чтения файла. Например, PDF-файлы читаются с помощью программы, подходящей для чтения PDF-файлов, а музыкальные файлы читаются с помощью программы, подходящей для чтения музыкальных файлов. Каждая из этих программ создается людьми, и создатели этих программ, т. е. программисты, также определяют формат файла как часть работы.
В компьютерах есть несколько разных программ для просмотра файлов. Эти программы специфичны для операционной системы. Все программы, используемые для просмотра файлов, так или иначе используют файловую систему компьютера.
Наша среда разработки предоставляет нам возможность просматривать файлы проекта. В NetBeans вы можете просмотреть все файлы, прикрепленные к проекту, выбрав вкладку «Файлы», которая находится там же, где и вкладка «Проекты». Если вкладку не удается найти, ее можно открыть из меню «Окно». Если щелкнуть проект, чтобы открыть его, отобразятся все его файлы.
Конкретный формат хранения файлов
Файлы существуют на жестком диске компьютера, который на самом деле представляет собой большой набор единиц и нулей, т. е. битов. Информация состоит из этих битов, например, одна переменная типа int занимает 32 бита (то есть 32 единицы или нуля). Современные жесткие диски размером в терабайт содержат около 8 триллионов битов (выписанное число равно 8 000 000 000 000). В этом масштабе одно целое число очень мало.
Файлы могут находиться практически в любом месте на жестком диске, даже разделенные на несколько частей. Файловая система компьютера отвечает за отслеживание расположения файлов на жестком диске, а также за предоставление возможности создавать новые файлы и изменять их. Основная обязанность файловой системы — абстрагирование истинной структуры жесткого диска; пользователю или программе, использующей файл, не нужно заботиться о том, как и где этот файл на самом деле хранится.
Чтение из файла
Чтение файла выполняется с помощью класса Scanner. Когда мы хотим прочитать файл с помощью класса Scanner, мы указываем путь к файлу, который мы хотим прочитать, в качестве параметра конструктору класса. Путь к файлу можно получить с помощью команды Java Paths.get, которой передается имя файла в строковом формате в качестве параметра: Paths.get("filename.extension") .
После создания объекта Scanner, считывающего файл, файл можно прочитать с помощью цикла while. Чтение продолжается до тех пор, пока не будут прочитаны все строки файла, т. е. пока сканер не найдет больше строк для чтения. Чтение файла может привести к ошибке, и именно по этой причине процесс требует отдельных блоков — один для попытки, а другой для отлова потенциальных ошибок. Мы вернемся к теме обработки ошибок позже.
Файл читается из корня проекта по умолчанию (при вызове нового Scanner(Paths.get("file.txt"))), т.е. из папки, содержащей папку src и файл pom.xml (и возможно и другие файлы). Содержимое этой папки можно проверить с помощью вкладки "Файлы" в NetBeans.
В приведенном ниже примере мы читаем все строки файла "file.txt", которые затем добавляются в список ArrayList.
Пустая строка в файле
Иногда пустая строка попадает в файл.Пропустить пустую строку можно с помощью команды continue и isEmpty -метода строки.
В приведенном ниже примере мы читаем из файла
Чтение данных очень просто.
Чтение данных определенного формата из файла
Мир полон данных, которые связаны с другими данными — они образуют коллекции. Например, личная информация может включать имя, дату рождения и номер телефона. С другой стороны, адресная информация может включать страну, город, почтовый адрес, почтовый номер и т. д.
Данные часто хранятся в файлах определенного формата. Одним из таких форматов, который нам уже знаком, является формат значений, разделенных запятыми (CSV), т. е. данные, разделенные запятыми.
Программа работает следующим образом:
Введите имя и возраст через запятую: virpi,19 Имя: virpi Возраст: 19 Введите имя и возраст через запятую: jenna,21 Имя: jenna Возраст: 21 Введите имя и возраст через запятую: ada, 20 Имя: Ада Возраст: 20
Чтение тех же данных из файла records.txt будет выглядеть так:
Чтение объектов из файла
Создание объектов на основе данных, считанных из файла, очень просто. Предположим, что у нас есть класс с именем Person , а также предыдущие данные.
Чтение объектов можно сделать следующим образом:
Чтение объектов из файла само по себе является явной обязанностью и по этой причине должно быть изолировано в методе. Это то, что мы будем делать в следующем упражнении.
Не забудьте проверить свои баллы по шарику в правом нижнем углу материала!
Java предоставляет несколько способов чтения файлов. Каждый из этих методов подходит для чтения разных типов файлов в разных ситуациях. Некоторые лучше подходят для чтения более длинных файлов, другие — для чтения более коротких и т. д.
В этом руководстве мы будем использовать следующие классы Java для чтения файлов
- Буферизованное чтение
- Файлы
- Сканер
На протяжении всего руководства мы используем файл, хранящийся в каталоге src, где путь к файлу — src/file.txt .
Сохраните несколько строк текста в этом файле, прежде чем продолжить.
Примечание. Вы должны правильно обрабатывать ошибки при использовании этих реализаций, чтобы придерживаться лучших методов написания кода.
Чтение текстовых файлов в Java с помощью BufferedReader
Класс BufferedReader считывает поток ввода символов. Он буферизует символы в буфере с размером по умолчанию 8 КБ, чтобы сделать процесс чтения более эффективным. Если вы хотите прочитать файл построчно, хорошим выбором будет использование BufferedReader.
BufferedReader эффективен при чтении больших файлов.
Метод readline() возвращает null при достижении конца файла.
Чтение файла в кодировке UTF-8 в Java с помощью BufferedReader
Мы можем использовать класс BufferedReader для чтения файла в кодировке UTF-8.
На этот раз мы передаем объект InputStreamReader при создании экземпляра BufferedReader.
Использование класса файлов Java для чтения файла
Класс Java Files, представленный в Java 7 в Java NIO, полностью состоит из статических методов, которые работают с файлами.
Используя класс Files, вы можете прочитать все содержимое файла в массив. Это делает его хорошим выбором для чтения небольших файлов.
Давайте посмотрим, как мы можем использовать класс Files в обоих этих сценариях.
Чтение небольших файлов в Java с помощью класса Files
Метод readAllLines() класса Files позволяет считывать все содержимое файла и сохранять каждую строку в массиве в виде строк.
Вы можете использовать класс Path для получения пути к файлу, поскольку класс Files принимает объект Path файла.
Вы можете использовать readAllBytes() для извлечения данных, хранящихся в файле, в массив байтов, а не в массив строк.
Чтение больших файлов в Java с помощью класса Files
Если вы хотите прочитать большой файл с помощью класса Files, вы можете использовать метод newBufferedReader() для получения экземпляра класса BufferedReader и читать файл построчно с помощью BufferedReader .
Чтение файлов с помощью Files.lines()
В Java 8 в классе Files появился новый метод для чтения всего файла в поток строк.
Чтение текстовых файлов в Java с помощью сканера
Класс Scanner разбивает содержимое файла на части, используя заданный разделитель, и считывает его часть за частью. Этот подход лучше всего подходит для чтения контента, разделенного разделителем.
Например, класс Scanner идеально подходит для чтения списка целых чисел, разделенных пробелами, или списка строк, разделенных запятыми.
Разделителем по умолчанию для класса Scanner является пробел. Но вы можете установить разделитель на другой символ или регулярное выражение. Он также имеет различные методы next, такие как next() , nextInt() , nextLine() и nextByte() для преобразования содержимого в различные типы.
В приведенном выше примере мы устанавливаем разделитель на пробел и используем метод next() для чтения следующей части содержимого, разделенной пробелом.
Чтение всего файла
Вы можете использовать класс Scanner для одновременного чтения всего файла без запуска цикла. Вы должны передать «\\Z» в качестве разделителя для этого.
Заключение
Как вы видели в этом руководстве, Java предлагает множество методов чтения текстовых файлов, которые вы можете выбрать в зависимости от характера стоящей перед вами задачи. Вы можете использовать BufferedReader для чтения больших файлов построчно.
Если вы хотите прочитать файл, содержимое которого разделено разделителем, используйте класс Scanner.
Также вы можете использовать класс Java NIO Files для чтения как маленьких, так и больших файлов.
Java IO API предоставляет два типа интерфейсов для чтения файлов, потоков и чтения. Потоки используются для чтения двоичных данных, а считыватели — для чтения символьных данных. Поскольку текстовый файл полон символов, для его чтения следует использовать реализации Reader. Есть несколько способов прочитать обычный текстовый файл в Java, например. вы можете использовать FileReader , BufferedReader или Scanner для чтения текстового файла. Каждая утилита предоставляет что-то особенное, например. BufferedReader обеспечивает буферизацию данных для быстрого чтения, а Scanner обеспечивает возможность синтаксического анализа.
Вы также можете использовать BufferedReader и Scanner для чтения текстового файла построчно в Java. Затем в Java SE 8 представлен еще один класс Stream java.util.stream.Stream, который обеспечивает ленивый и более эффективный способ чтения файла.
В JDK 7 также есть несколько полезных утилит, например. Класс Files и конструкция try-with-resource, которые еще больше упростили чтение текстового файла.
В этой статье я поделюсь несколькими примерами чтения текстового файла в Java, их плюсами, минусами и важными моментами каждого подхода. Это даст вам достаточно информации, чтобы выбрать правильный инструмент для работы в зависимости от размера файла, содержимого файла и того, как вы хотите читать.
1. Чтение текстового файла с помощью FileReader
FileReader — это универсальная реализация Reader для чтения файла. Он принимает строковый путь к файлу или экземпляр java.io.File для начала чтения. Он также предоставляет пару перегруженных методов read() для чтения символа или чтения символов в массив или в объект CharBuffer.
Вот пример чтения текстового файла с помощью FileReader в Java:
Вы можете видеть, что вместо того, чтобы читать по одному символу за раз, я читаю символы в массив. Это более эффективно, потому что read() будет обращаться к файлу несколько раз, а read(char[]) будет обращаться к файлу только один раз, чтобы прочитать тот же объем данных.
Я использую 8 КБ буфера, поэтому за один вызов я могу прочитать только столько данных. Вы можете иметь больший или меньший буфер в зависимости от вашей памяти кучи и размера файла. Вы также должны заметить, что я зацикливаюсь до тех пор, пока read(char[]) не вернет -1, что сигнализирует о конце файла.
Еще одна интересная вещь, на которую стоит обратить внимание, это вызов String.valueOf(buffer, 0, numberOfCharsRead) , который необходим, поскольку у вас может не быть 8 КБ данных в файле или даже с большим файлом, последний вызов может не быть может заполнить массив символов, и он может содержать грязные данные из последнего чтения.
2. Чтение текстового файла на Java с помощью BufferedReader
Класс BufferedReader — это декоратор, который обеспечивает функциональность буферизации для FileReader или любого другого Reader. Этот ввод буфера класса из источника, например. файлы в память для эффективного чтения. В случае BufferedReader вызов read() не всегда переходит в файл, если он может найти данные во внутреннем буфере BufferedReader.
Размер внутреннего буфера по умолчанию составляет 8 КБ, что достаточно для большинства целей, но вы также можете увеличить или уменьшить размер буфера при создании объекта BufferedReader. Код чтения аналогичен предыдущему примеру.
В этом примере я также читаю содержимое файла в массив. Вместо того, чтобы читать по одному символу за раз, это более эффективно. Единственная разница между предыдущими примерами и этим заключается в том, что метод read() BufferedReader быстрее, чем метод read() FileReader, потому что чтение может происходить из самой памяти.
Чтобы прочитать полнотекстовый файл, вы выполняете цикл до тех пор, пока метод read(char[]) не вернет -1, что сигнализирует о конце файла. См. Core Java Volume 1 — Fundamentals, чтобы узнать больше о том, как класс BufferedReader работает в Java.
3. Чтение текстового файла на Java с помощью Scanner
Третий инструмент или класс для чтения текстового файла в Java — это Scanner, который был добавлен в выпуск JDK 1.5.Два других FileReader и BufferedReader присутствуют в версиях JDK 1.0 и JDK 1.1. Сканер — гораздо более многофункциональный и универсальный класс.
Он обеспечивает не только чтение, но и анализ данных. Вы можете не только читать текстовые данные, но также можете читать текст как число или число с плавающей запятой, используя методы nextInt() и nextFloat().
Класс использует шаблон регулярного выражения для определения маркера, что может быть сложно для новичков. Два основных метода чтения текстовых данных из сканера — это next() и nextLine() , первый из которых читает слова, разделенные пробелом, а второй может использоваться для чтения текстового файла построчно в Java. В большинстве случаев вы должны использовать метод nextLine(), как показано ниже:
Вы можете использовать метод hasNext(), чтобы определить, есть ли еще токен для чтения в файле, и выполнить цикл, пока он не вернет false. Хотя вы должны помнить, что next() или nextLine() могут блокироваться до тех пор, пока данные не будут доступны, даже если hasNext() возвращает true. Этот код считывает содержимое «file.txt» построчно. См. этот учебник, чтобы узнать больше о классе Scanner и чтении файлов в Java.
4. Чтение текстового файла с помощью Stream в Java 8
В выпуске JDK 8 появилось несколько интересных новых функций, например. лямбда-выражение и потоки, которые делают чтение файлов еще более плавным в Java. Поскольку потоки ленивы, вы можете использовать их для строк только для чтения, которые вы хотите из файла, например. вы можете прочитать все непустые строки, отфильтровав пустые строки. Использование ссылки на метод также делает код чтения файла намного более простым и кратким, настолько, что вы можете прочитать файл всего одной строкой, как показано ниже:
Теперь, если вы хотите выполнить некоторую предварительную обработку, вот код для обрезки каждой строки, фильтрации пустых строк, чтобы читать только непустые, и помните, что это лениво, потому что Files.lines() метод возвращает поток String, а потоки в JDK 8 ленивы (см. Java 8 в действии).
Мы будем использовать этот код для чтения файла, содержащего строку, заполненную пробелами, и пустую строку, ту же самую, которую мы использовали в предыдущем примере, но на этот раз вывод не будет содержать 5 строк. а всего три строки, потому что пустые строки уже отфильтрованы, как показано ниже:
Вы видите, что появились только три из пяти строк, потому что две другие были отфильтрованы. Это лишь верхушка айсберга того, что вы можете делать с Java SE 8. См. Java SE 8 для действительно нетерпеливых, чтобы узнать больше о функциях Java 8.
5. Как прочитать текстовый файл как строку в Java
Иногда вы читаете полное содержимое текстового файла как строку в Java. В основном это относится к небольшим текстовым файлам, так как для больших файлов вы столкнетесь с java.lang.OutOfMemoryError: ошибка пространства кучи java. До Java 7 для этого требовалось много кодового кода, потому что вам нужно было использовать BufferedReader для чтения текстового файла построчно, а затем добавить все эти строки в StringBuilder и, наконец, вернуть сгенерированную из него строку.
Теперь вам не нужно делать все это, вы можете использовать метод Files.readAllBytes() для чтения всех байтов файла за один раз. После этого вы можете преобразовать этот массив байтов в строку. как показано в следующем примере:
Это был довольно маленький файл, так что это было довольно просто. Однако при использовании readAllBytes() вы должны помнить о кодировке символов. Если ваш файл не находится в кодировке символов платформы по умолчанию, вы должны явно указать символ, который будет выполняться как при чтении, так и при преобразовании в строку. Используйте перегруженную версию readAllBytes(), которая принимает кодировку символов. Вы также можете увидеть, как я читаю XML как строку в Java, здесь.
6. Чтение всего файла в списке
Подобно последнему примеру, иногда вам нужно, чтобы все строки текстового файла были помещены в список ArrayList или Vector или просто в список. До Java 7 эта задача также включала шаблоны, например. чтение файлов построчно, добавление их в список и, наконец, возврат списка вызывающей стороне, но после Java 7 это стало очень просто. Вам просто нужно использовать метод Files.readAllLines(), который возвращает все строки текстового файла в список, как показано ниже:
Как и в последнем примере, вы должны указать кодировку символов, если она отличается от кодировки платформы по умолчанию. Вы можете использовать см. здесь я указал UTF-8. Опять же, используйте этот трюк только в том случае, если вы знаете, что файл небольшой и у вас достаточно памяти для хранения списка, содержащего все строки текстового файла, иначе ваша программа Java завершится с ошибкой OutOfMemoryError.
7. Как прочитать текстовый файл в Java в массив
Этот пример также очень похож на два последних примера, на этот раз мы читаем содержимое файла в массив строк. Здесь я использовал ярлык: сначала я прочитал все строки как список, а затем преобразовал список в массив.
В результате получается простой и элегантный код, но вы также можете считывать данные в массив символов, как показано в первом примере. Используйте метод read(char[] data) при чтении данных в массив символов.
Вот пример чтения текстового файла в массив строк в Java:
Этот метод использует наш существующий метод, который считывает файл в список, а код здесь предназначен только для преобразования списка в массив в Java.
8. Как прочитать файл построчно в Java
Это один из интересных примеров чтения текстового файла в Java. Вам часто нужны данные файла построчно. К счастью, и BufferedReader, и Scanner предоставляют удобный служебный метод для построчного чтения. Если вы используете BufferedReader, вы можете использовать readLine(), а если вы используете Scanner, вы можете использовать nextLine() для чтения содержимого файла построчно. В нашем примере я использовал BufferedReader, как показано ниже:
Просто помните, что строка считается завершенной одним из следующих символов: перевод строки ('\n'), возврат каретки ('\r') или возврат каретки, за которым сразу следует строка фид.
Java-программа для чтения текстового файла на Java
Вот полная программа Java для чтения обычного текстового файла на Java. Вы можете запустить эту программу в Eclipse, если вы создадите файлы, используемые в этой программе, например. «sample.txt», «file.txt» и «newfile.txt». Поскольку я использую относительный путь, вы должны убедиться, что файлы находятся в пути к классам. Если вы запускаете эту программу в Eclipse, вы можете просто создать эти файлы в корне каталога проекта. Программа выдаст FileNotFoundException или NoSuchFileExcpetion, если не сможет найти файлы.
Я не привожу вывод здесь, потому что мы уже прошли через это и обсуждали в соответствующих примерах, но вам нужна Java 8 для компиляции и запуска этой программы. Если вы используете Java 7, просто удалите примеры 4 и 5, в которых используется синтаксис и функции Java 8, и программа должна работать нормально.
Это все о том, как читать текстовый файл в Java. Мы рассмотрели все основные утилиты и классы, которые можно использовать для чтения файла в Java, такие как FileReader, BufferedReader и Scanner. Мы также рассмотрели служебные методы, добавленные в Java NIO 2 в JDK 7, например. Files.readAllLines() и Files.readAllBytes() для чтения файла в List и String соответственно.
- Как проверить, скрыт ли файл в Java? (решение)
- Как прочитать файл XML в Java? (руководство)
- Как читать файл Excel в Java? (руководство)
- Как читать XML-файл как строку в Java? (пример)
- Как скопировать непустые каталоги в Java? (пример)
- Как читать/записывать из/в RandomAccessFile в Java? (учебник)
- Как добавить текст в файл в Java? (решение)
- Как прочитать ZIP-файл в Java? (учебник)
- Как читать из файла с отображением памяти в Java? (пример)
Наконец, мы коснулись нового способа чтения файлов с помощью Java 8 Stream, который обеспечивает ленивое чтение и полезную опцию предварительной обработки для фильтрации ненужных строк.
Начиная с Java 5 класс java.util.Scanner можно использовать для чтения файла в Java. Ранее мы видели примеры чтения файла в Java с использованием FileInputStream и чтения файла построчно с использованием BufferedInputStream, а в этом руководстве по Java мы увидим, как мы можем использовать Scanner для чтения файлов в Java. Scanner — это служебный класс в пакете java.util, который предоставляет несколько удобных методов для чтения int , long , String , double и т. д. из источника, который может быть InputStream, файлом или самой строкой.
Как отмечалось в разделе Как получить данные от пользователя, Scanner также является простым способом чтения данных, введенных пользователем, с использованием System.in (InputStream) в качестве источника. Основное преимущество использования Scanner для чтения файлов заключается в том, что он позволяет вам изменить разделитель с помощью метода useDelimiter(), поэтому вы можете использовать любой другой разделитель, например, запятую, вертикальную черту вместо пробела.
Как читать файл в Java — пример сканера
В этой Java-программе мы использовали java.util.Scanner для чтения файла построчно в Java. Сначала мы создали экземпляр File для представления текстового файла на Java, а затем передали этот экземпляр File в java.util.Scanner для сканирования.
Сканер предоставляет такие методы, как hasNextLine() и readNextLine(), которые можно использовать для чтения файла построчно. Рекомендуется проверять наличие следующей строки, прежде чем читать следующую строку, чтобы избежать NoSuchElementException в Java.
импортировать java.io.File ;
import java.io.FileNotFoundException ;
импортировать java.util.Scanner ;
/**
*
* Java-программа для чтения файлов с использованием класса Scanner в Java.
* java.util.Scanner добавлен в Java 5 и предлагает удобный метод чтения данных
*
* @author
*/
открытый класс ScannerExample
public static void main ( String args []) генерирует исключение FileNotFoundException
//создание экземпляра файла для ссылки на текстовый файл в Java
File text = new File ("C:/temp/test.txt" );
//Создание экземпляра сканера для чтения файла в Java
Scanner scnr = new Scanner (text) ;
//Чтение каждой строки файла с помощью класса Scanner
int lineNumber = 1 ;
в то время как ( scnr. hasNextLine ()) <
String line = scnr. следующая строка () ;
Система. вне . println("строка" + номер_строки + ":" + строка);
НомерСтроки++ ;
>
Вывод:
строка 1:--------------------- НАЧАЛО------
------ --------------------------------------------------------
строка 2: Java предоставляет несколько способов чтения файлов.
строка 3: Вы можете прочитать файл, используя Scanner, FileReader,
FileInputStream и BufferedReader.
строка 4: Эта программа на Java показывает, как читать файл с помощью java. использовать .класс сканера .
строка 5 :----------------------------------- КОНЕЦ--------------------- --
---------------------------------
Читайте также: