Как читать файлы на Java

Java предоставляет несколько методов чтения файлов. Каждый из этих методов подходит для чтения файлов разных типов в разных ситуациях. Некоторые лучше подходят для чтения более длинных файлов, другие - для чтения более коротких и т. Д.

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

  • BufferedReader
  • Файлы
  • Сканер

На протяжении всего урока мы используем файл, хранящийся в каталоге src каталог, в котором путь к файлу равен src/file.txt.


Прежде чем продолжить, сохраните в этом файле несколько строк текста.

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

Чтение текстовых файлов на Java с помощью BufferedReader

BufferedReader класс читает поток ввода символов. Он буферизует символы в буфере с размером по умолчанию 8 КБ, чтобы сделать процесс чтения более эффективным. Если вы хотите читать файл построчно, используйте BufferedReader.


BufferedReader эффективен при чтении больших файлов.

import java.io.*; public class FileReaderWithBufferedReader {
public static void main(String[] args) throws IOException{We
String file = 'src/file.txt';
BufferedReader bufferedReader = new BufferedReader(new FileReader(file));

String curLine;
while ((curLine = bufferedReader.readLine()) != null){

//process the line as required

System.out.println(curLine);
}
bufferedReader.close();
} }

readline() метод возвращает null, когда достигается конец файла.

Примечание:Не забудьте закрыть файл по окончании чтения.

Чтение закодированного файла UTF-8 на Java с помощью BufferedReader

Мы можем использовать BufferedReader для чтения файла в кодировке UTF-8.

На этот раз мы передаем InputStreamReader объект при создании BufferedReader пример.


import java.io.*; public class EncodedFileReaderWithBufferedReader {
public static void main(String[] args) throws IOException {
String file = 'src/fileUtf8.txt';
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(new FileInputStream(file), 'UTF-8'));

String curLine;
while ((curLine = bufferedReader.readLine()) != null){

//process the line as you require

System.out.println(curLine);
}
} }


Использование класса файлов Java для чтения файла

Java Files Класс, представленный в Java 7 в Java NIO, полностью состоит из статических методов, работающих с файлами.

Использование Files class, вы можете прочитать все содержимое файла в массиве. Это делает его хорошим выбором для чтения небольших файлов.

Давайте посмотрим, как мы можем использовать класс Files в обоих этих сценариях.

Чтение небольших файлов на Java с помощью класса Files

readAllLines() метод Files Класс позволяет читать все содержимое файла и сохраняет каждую строку в массиве в виде строк.


Вы можете использовать Path класс, чтобы получить путь к файлу, поскольку Files класс принимает Path объект файла.

import java.io.IOException; import java.nio.file.*; import java.util.*; public class SmallFileReaderWithFiles {
public static void main(String[] args) throws IOException {
String file = 'src/file.txt';
Path path = Paths.get(file);
List lines = Files.readAllLines(path);
} }

Вы можете использовать readAllBytes() для извлечения данных, хранящихся в файле, в массив байтов вместо массива строк.

byte[] bytes = Files.readAllBytes(path);

Чтение больших файлов на Java с помощью класса Files

Если вы хотите прочитать большой файл с Files класс, вы можете использовать newBufferedReader() для получения экземпляра BufferedReader class и прочитайте файл построчно, используя BufferedReader.

import java.io.*; import java.nio.file.*; public class LargeFileReaderWithFiles {
public static void main(String[] args) throws IOException {
String file = 'src/file.txt';
Path path = Paths.get(file);
BufferedReader bufferedReader = Files.newBufferedReader(path);

String curLine;
while ((curLine = bufferedReader.readLine()) != null){

System.out.println(curLine);
}
bufferedReader.close();
} }


Чтение файлов с помощью Files.lines ()

В Java 8 появился новый метод в классе Files для чтения всего файла в Stream струн.


import java.io.IOException; import java.nio.file.*; import java.util.stream.Stream; public class FileReaderWithFilesLines {
public static void main(String[] args) throws IOException {
String file = 'src/file.txt';
Path path = Paths.get(file);
Stream lines = Files.lines(path);

lines.forEach(s -> System.out.println(s));
lines.close();
} }


Чтение текстовых файлов на Java с помощью сканера

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

Например, Scanner class идеально подходит для чтения списка целых чисел, разделенных пробелами, или списка строк, разделенных запятыми.

Разделитель по умолчанию для Scanner класс - это пробел. Но вы можете установить в качестве разделителя другой символ или регулярное выражение. Он также имеет различные методы next, такие как next(), nextInt(), nextLine() и nextByte(), для преобразования содержимого в разные типы.

import java.io.IOException; import java.util.Scanner; import java.io.File; public class FileReaderWithScanner {
public static void main(String[] args) throws IOException{
String file = 'src/file.txt';
Scanner scanner = new Scanner(new File(file));
scanner.useDelimiter(' ');

while(scanner.hasNext()){

String next = scanner.next();

System.out.println(next);
}
scanner.close();
} }

В приведенном выше примере мы устанавливаем разделитель на пробел и используем next() для чтения следующей части содержимого, разделенной пробелом.


Чтение всего файла

Вы можете использовать Scanner для чтения всего файла сразу без запуска цикла. Вы должны пройти “\Z” как разделитель для этого.

scanner.useDelimiter('\Z'); System.out.println(scanner.next()); scanner.close(); Примечание:Класс Scanner не синхронизирован и, следовательно, не является потокобезопасным.

Заключение

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

Если вы хотите прочитать файл, содержимое которого разделено разделителем, используйте Scanner класс.

Также вы можете использовать Java NIO Files класс для чтения как маленьких, так и больших файлов.