Java прочитать файл построчно

Содержание
  1. Rukovodstvo
  2. статьи и идеи для разработчиков программного обеспечения и веб-разработчиков.
  3. Java: чтение файла в строку
  4. Введение В этом руководстве мы будем считывать файл в строку в Java. Есть несколько способов чтения текстового содержимого файла. Вот список всех классов и методов, которые мы рассмотрим: * Files.lines () * Files.readString () * Files.readAllBytes () * FileReader * BufferedReader * Scanner Files.lines () Класс Files содержит статические методы для работы с файлами и каталогами. Полезный метод — lines (), который возвращает поток строк: Stream . Из этого потока,
  5. Вступление
  6. Files.lines ()
  7. Files.readString ()
  8. Files.readAllBytes ()
  9. Сканер
  10. FileReader
  11. FileReader.read (char [])
  12. FileReader.read ()
  13. BufferedReader
  14. Заключение
  15. Как построчно считывать файл в Java?
  16. Больше полезных статей!
  17. 5 thoughts to “Как построчно считывать файл в Java?”
  18. Построчное чтение файла в Java
  19. Чтение файла с помощью BufferedReader
  20. Чтение файла с помощью Scanner
  21. Чтение файла с помощью java.nio.file.Files
  22. Чтение файла с помощью RandomAccessFile
  23. Заключение
  24. oleglomako / Как построчно считывать файл в Java.java

Rukovodstvo

статьи и идеи для разработчиков программного обеспечения и веб-разработчиков.

Java: чтение файла в строку

Введение В этом руководстве мы будем считывать файл в строку в Java. Есть несколько способов чтения текстового содержимого файла. Вот список всех классов и методов, которые мы рассмотрим: * Files.lines () * Files.readString () * Files.readAllBytes () * FileReader * BufferedReader * Scanner Files.lines () Класс Files содержит статические методы для работы с файлами и каталогами. Полезный метод — lines (), который возвращает поток строк: Stream . Из этого потока,

Вступление

В этом руководстве мы будем читать файл в виде строки в Java. Есть несколько способов чтения текстового содержимого файла.

Вот список всех классов и методов, которые мы рассмотрим:

Files.lines ()

Класс Files содержит статические методы для работы с файлами и каталогами. Полезный метод — lines() который возвращает поток строк: Stream . Из этого потока можно получить строки, содержащиеся в файле.

Метод принимает Path к файлу, который мы хотели бы прочитать, с необязательной Charset . Мы будем использовать try-with-resources для автоматизации очистки и закрытия:

 Path path = Paths.get("input.txt"); try (Stream stream = Files.lines(path, StandardCharsets.UTF_8)) < stream.forEach(System.out::println); >catch (IOException ex) < // Handle exception >

Поскольку метод возвращает Stream , мы используем его forEach() для перебора строк со ссылкой на метод для краткости.

Вместо печати каждой линии, StringBuilder может быть использован для добавления строк:

 Path path = Paths.get("input.txt"); StringBuilder sb = new StringBuilder(); try (Stream stream = Files.lines(path)) < stream.forEach(s ->sb.append(s).append("\n")); > catch (IOException ex) < // Handle exception >String contents = sb.toString(); 

С помощью StringBuilder весь файл может быть представлен в одной String ( contents выше переменная содержимого). Перед выполнением таких итераций важно учитывать длину входного файла.

Если файл не слишком велик, можно поместить его в строку, однако, если его размер составляет сотни мегабайт, это не так разумно.

Files.readString ()

Начиная с Java 11, Files познакомил нас с readString() , который принимает Path к файлу, а также Charset .

В отличие от Files.lines() , он возвращает String напрямую, а не объект Stream

 Path path = Paths.get("input.txt"); String contents = null; try < contents = Files.readString(path, StandardCharsets.ISO_8859_1); >catch (IOException ex) < // Handle exception >

Files.readAllBytes ()

Более низкоуровневый подход к чтению — это Files.readAllBytes() , который возвращает byte[] . Разработчик должен использовать эти байты

Читайте также:  Java native libraries это

Этот метод также принимает Path к файлу, который мы хотим прочитать:

 Path path = Paths.get("input.txt"); byte[] bytes = null; try < bytes = Files.readAllBytes(path); >catch (IOException ex) < // Handle exception >

Теперь bytes содержит всю информацию из файла input.txt Самый простой способ преобразовать его в String — поместить их в конструктор с необязательным Charset :

 String str = new String(bytes, StandardCharsets.UTF_8); 

Примечание. Такие решения, как чтение всех байтов, подходят только в случаях, когда мы имеем дело с небольшими размерами файлов. Это не способствует производительности и не имеет особого смысла хранить большие файлы в памяти программы.

Сканер

Scanner — особенно полезный класс для чтения контента из потоков. Поскольку он работает с абстрактными потоками, его также можно использовать для чтения строк. Scanner работает, разбивая ввод на токены, которые последовательно извлекаются из входного потока.

Поскольку мы работаем со строками, мы хотели бы использовать методы, возвращающие строки. Scanner имеет next() и nextLine() именно для этого. Оба метода возвращают объекты типа String . Первый используется для чтения произвольных строк, тогда как второй анализирует и возвращает целые строки.

Если каждая строка содержит нужное количество данных, то nextLine() — идеальный выбор. Если в файле есть важная информация, разбитая на более мелкие куски, но не обязательно строки (или файл содержит, скажем, одну строку), тогда next() может быть лучшим вариантом.

Scanner принимает множество объектов — Path , InputStream , File и т. Д. Мы будем использовать File :

 File file = new File("input.txt"); Scanner sc = new Scanner(file); while(sc.hasNext())

Мы используем while цикл до тех пор , как sc имеет больше элементов. Если бы мы не проверили с помощью hasNext() , sc выдаст NoSuchElementexception если мы попытаемся получить доступ к элементу после последнего.

Идея использования hasNext() и next() исходит из Iterator , поскольку Scanner внутренне его реализует.

FileReader

FileReader используется для чтения файлов. Он предлагает read() и read(char[]) , которые возвращают один символ и несколько символов соответственно. Кроме того, он принимает в конструктор File или String .

FileReader.read (char [])

Откроем файл с помощью FileReader и прочитаем его содержимое:

 FileReader in = new FileReader("input.txt"); char[] chars = new char[256]; int n = in.read(chars, 0, chars.length); String contents = new String(chars); 

Метод read() принимает последовательность символов (в которой мы сохраняем прочитанные символы), начальную и конечную точки того, что мы хотим прочитать. В частности, мы решили читать не более 256 символов. Если в input.txt больше, мы прочитаем только 256 символов. Если его меньше, возвращаются читаемые символы.

Возвращаемое значение, хранящееся внутри целого числа n может использоваться для проверки того, сколько символов фактически прочитал метод. Если достигнут конец потока, метод возвращает -1 .

Поскольку метод заполняет char[] , мы можем преобразовать его в String . Аналогичный результат можно получить, используя String.valueOf(char[]) .

FileReader.read ()

Метод read() без char[] читает по одному символу за раз. Нам нужно перебрать содержимое и прочитать каждый символ самостоятельно:

 FileReader in = new FileReader("input.txt"); StringBuilder sb = new StringBuilder(); while(in.read() != -1) < sb.append(in.read()); >String contents = sb.toString(); in.close(); 

Здесь мы проверяем, не является ли прочитанный символ -1 , что указывает на то, что символов для чтения не осталось. Если нет, мы append() его к StringBuilder и, наконец, преобразуем его в String .

Читайте также:  Taxportal nalogprof ru students php

Примечание. И read() и read(char[]) читают байты, преобразуют их в символы и возвращают их один за другим . Это неэффективно и по возможности должно выполняться с буферизацией .

BufferedReader

BufferedReader — это объект, предназначенный для чтения текста из потока ввода символов. Он буферизован, что означает, что он использует внутренний буфер для временного хранения. Как мы видели в предыдущем разделе, «обычные» Reader иногда могут быть неэффективными.

Рекомендуется обернуть любой потенциально дорогостоящий Reader в BufferedReader для повышения производительности, поскольку символы буферизации позволяют более эффективно читать вводимый текст.

Создадим экземпляр BufferedReader :

 BufferedReader in = new BufferedReader(new FileReader("input.txt")); 

На данный момент у нас есть буферный объект чтения, готовый читать содержимое из input.txt . В этом примере мы будем читать файл построчно, хотя BufferedReader поддерживает чтение отдельных символов по отдельности, а также нескольких символов в массив.

Давайте воспользуемся этим BufferedReader для чтения файла и сохранения его содержимого построчно в строку:

 StringBuilder sb = new StringBuilder(); while(in.readLine != null) < sb.append(in.readLine()).append("\n"); >String contents = sb.toString(); in.close(); 

И снова мы используем StringBuilder для сбора всех строк. Чтобы отделить каждую строку, мы добавляем между ними \n Наконец, закрываем поток.

Заключение

В этой статье мы рассмотрели некоторые распространенные техники чтения файлов в строки в Java. Есть много вариантов, но большинство из них имеют схожий основной принцип: указать путь к файлу, прочитать содержимое в структуре данных (например, char[] или String); затем выполните некоторую заключительную обработку, чтобы соответствующим образом собрать все содержимое файла.

Мы рассмотрели метод File.lines() метод Files.readString() метод Files.readAllBytes() , а также классы Scanner , FileReader и BufferedReader

Licensed under CC BY-NC-SA 4.0

Источник

Как построчно считывать файл в Java?

Как построчно считывать файл в Java?

Сегодня мы рассмотрим одну из наиболее частых операций с файлами в Java, а именно построчное считывание содержимого файла.

Программа ниже покажет это на примере.

Вот такой простой и эффективный способ построчного считывания файла.

Следите за остальными статьями из раздела «Операции ввода-вывода«.

Больше полезных статей!

5 thoughts to “Как построчно считывать файл в Java?”

Подскажите пожалуйста, как каждый элемент при считывании из файла добавить в коллекцию, чтобы потом эту коллекцию прогнать через другой метод. Скажем в файле находиться урлы, и хочеться их прочитать, а потом открыть..

Давайте рассмотрим ситуацию, где каждый урл в файле находится на отдельной строке. В этом случае Вам нужно вначале метода создать список, например, List listOfUrls = new ArrayList<>(); и затем в приведенном выше коде заменить код line = reader.readLine(); на listOfUrls.add(reader.readLine()) . Далее просто передаете полученный список ссылок в качестве параметра в свой метод. Удачи!

Где закрытие ресурсов-то? Путь хардкодить в том же методе — очень плохо. Лучше уже вынести если не в отдельный класс, то хоть в отдельный метод, принимающий путь

А как сделать так, чтобы каждая строка становилась переменной, например первая строка была переменной String name, вторая int age и так далее

Источник

Построчное чтение файла в Java

В данном мануале мы разберем разные способы построчного считывания содержимого файла с помощью Java. Это можно сделать с помощью следующих классов Java: java.io.BufferedReader, java.util.Scanner, Files.readAllLines() и java.io.RandomAccessFile.

Читайте также:  Custom tag in javascript

Чтение файла с помощью BufferedReader

Читать файл построчно можно с помощью метода readLine() из java.io.BufferedReader. Этот метод возвращает null при достижении конца файла.

Пример считывания с помощью BufferedReader:

import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; public class ReadFileLineByLineUsingBufferedReader < public static void main(String[] args) < BufferedReader reader; try < reader = new BufferedReader(new FileReader("sample.txt")); String line = reader.readLine(); while (line != null) < System.out.println(line); // read next line line = reader.readLine(); >reader.close(); > catch (IOException e) < e.printStackTrace(); >> >

Узнайте больше о BufferedReader в API Doc (Java SE 8).

Чтение файла с помощью Scanner

С помощью класса Scanner можно открыть файл, а затем построчно прочитать его содержимое.

Ниже приведен пример чтения файла с помощью Scanner:

package com.journaldev.readfileslinebyline; import java.io.File; import java.io.FileNotFoundException; import java.util.Scanner; public class ReadFileLineByLineUsingScanner < public static void main(String[] args) < try < Scanner scanner = new Scanner(new File("sample.txt")); while (scanner.hasNextLine()) < System.out.println(scanner.nextLine()); >scanner.close(); > catch (FileNotFoundException e) < e.printStackTrace(); >> >

Рекомендуем узнать больше о Scanner в API Doc (Java SE 8).

Чтение файла с помощью java.nio.file.Files

java.nio.file.Files — это класс утилит, в котором есть разные полезные методы. С помощью метода readAllLines() можно прочитать все строки файла в виде списка.

Пример построчного чтения файла с помощью Files:

package com.journaldev.readfileslinebyline; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; import java.util.List; public class ReadFileLineByLineUsingFiles < public static void main(String[] args) < try < List allLines = Files.readAllLines(Paths.get("sample.txt")); for (String line : allLines) < System.out.println(line); >> catch (IOException e) < e.printStackTrace(); >> >

Рекомендуем подробнее ознакомиться с Files в API Doc (Java SE 8).

Чтение файла с помощью RandomAccessFile

С помощью RandomAccessFile можно открыть файл в read mode, а затем с помощью метода readLine прочитать файл построчно.

Пример работы RandomAccessFile:

package com.journaldev.readfileslinebyline; import java.io.IOException; import java.io.RandomAccessFile; public class ReadFileLineByLineUsingRandomAccessFile < public static void main(String[] args) < try < RandomAccessFile file = new RandomAccessFile("sample.txt", "r"); String str; while ((str = file.readLine()) != null) < System.out.println(str); >file.close(); > catch (IOException e) < e.printStackTrace(); >> >

Узнайте больше о RandomAccessFile в API Doc (Java SE 8).

Заключение

В этом мануале мы разобрали разные способы построчного чтения содержимого файла с помощью Java.

Источник

oleglomako / Как построчно считывать файл в Java.java

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters

import java . io . BufferedReader ;
import java . io . File ;
import java . io . FileNotFoundException ;
import java . io . FileReader ;
import java . io . IOException ;
public class ReadFileLineByLine
// построчное считывание файла
public static void main ( String [] args )
try
File file = new File ( «/Users/prologistic/file.txt» );
//создаем объект FileReader для объекта File
FileReader fr = new FileReader ( file );
//создаем BufferedReader с существующего FileReader для построчного считывания
BufferedReader reader = new BufferedReader ( fr );
// считаем сначала первую строку
String line = reader . readLine ();
while ( line != null )
System . out . println ( line );
// считываем остальные строки в цикле
line = reader . readLine ();
>
> catch ( FileNotFoundException e )
e . printStackTrace ();
> catch ( IOException e )
e . printStackTrace ();
>
>
>

Источник

Оцените статью