Существует множество способов чтения текстового файла на Java. Давайте рассмотрим различные методы чтения текстового файла на Java поочередно.
Чтение текстового файла на Java
Существует множество способов чтения текстового файла на Java. Текстовый файл состоит из символов, поэтому мы можем использовать классы Reader. Также существуют некоторые вспомогательные классы для чтения текстового файла на Java.
- Чтение текстового файла на Java с использованием класса Files
- Чтение текстового файла на Java с использованием
FileReader
- Чтение текстового файла на Java с использованием BufferedReader
- Использование класса Scanner для чтения текстового файла на Java
Теперь давайте рассмотрим примеры, показывающие, как читать текстовый файл на Java с использованием этих классов.
Чтение текстового файла в Java с использованием java.nio.file.Files
Мы можем использовать класс Files для чтения всех содержимого файла в массив байтов. Класс Files также имеет метод для чтения всех строк в список строк. Класс Files был введен в Java 7, и его хорошо использовать, если вам нужно загрузить все содержимое файла. Вы должны использовать этот метод только при работе с небольшими файлами и если вам нужно сохранить все содержимое файла в памяти.
String fileName = "/Users/pankaj/source.txt";
Path path = Paths.get(fileName);
byte[] bytes = Files.readAllBytes(path);
List<String> allLines = Files.readAllLines(path, StandardCharsets.UTF_8);
Чтение текстового файла в Java с использованием java.io.FileReader
Вы можете использовать FileReader для получения BufferedReader и затем читать файлы построчно. FileReader не поддерживает кодировку и работает с кодировкой по умолчанию системы, поэтому это не очень эффективный способ чтения текстового файла в Java.
String fileName = "/Users/pankaj/source.txt";
File file = new File(fileName);
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
String line;
while((line = br.readLine()) != null){
//обработка строки
System.out.println(line);
}
Чтение текстового файла в Java с использованием java.io.BufferedReader
BufferedReader подходит, если вы хотите читать файл построчно и обрабатывать его. Это удобно для обработки больших файлов, и он также поддерживает кодировку. BufferedReader синхронизирован, поэтому операции чтения из BufferedReader можно безопасно выполнять из нескольких потоков. Размер буфера по умолчанию у BufferedReader составляет 8 КБ.
String fileName = "/Users/pankaj/source.txt";
File file = new File(fileName);
FileInputStream fis = new FileInputStream(file);
InputStreamReader isr = new InputStreamReader(fis, cs);
BufferedReader br = new BufferedReader(isr);
String line;
while((line = br.readLine()) != null){
//обработать строку
System.out.println(line);
}
br.close();
Использование Scanner для чтения текстового файла в Java
Если вы хотите читать файл построчно или на основе некоторого регулярного выражения Java, класс Scanner – то, что вам нужно. Scanner разбивает ввод на токены с использованием шаблона разделителя, который по умолчанию соответствует пробелам. Полученные токены затем могут быть преобразованы в значения различных типов с использованием различных методов next. Класс Scanner не синхронизирован и, следовательно, не является потокобезопасным.
Path path = Paths.get(fileName);
Scanner scanner = new Scanner(path);
System.out.println("Read text file using Scanner");
//читать построчно
while(scanner.hasNextLine()){
//обработать каждую строку
String line = scanner.nextLine();
System.out.println(line);
}
scanner.close();
Пример чтения файла на Java
Вот пример класса, показывающий, как читать текстовый файл на Java. В примерах используются Scanner, Files, BufferedReader с поддержкой кодировки и FileReader.
package com.journaldev.files;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
import java.util.Scanner;
public class JavaReadFile {
public static void main(String[] args) throws IOException {
String fileName = "/Users/pankaj/source.txt";
//используя класс Files Java 7 для обработки небольших файлов, получаем полные данные файла
readUsingFiles(fileName);
//используя класс Scanner для больших файлов, чтение построчно
readUsingScanner(fileName);
//чтение с использованием BufferedReader, чтение построчно
readUsingBufferedReader(fileName);
readUsingBufferedReaderJava7(fileName, StandardCharsets.UTF_8);
readUsingBufferedReader(fileName, StandardCharsets.UTF_8);
//чтение с использованием FileReader, без поддержки кодировки, неэффективно
readUsingFileReader(fileName);
}
private static void readUsingFileReader(String fileName) throws IOException {
File file = new File(fileName);
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
String line;
System.out.println("Reading text file using FileReader");
while((line = br.readLine()) != null){
//обработка строки
System.out.println(line);
}
br.close();
fr.close();
}
private static void readUsingBufferedReader(String fileName, Charset cs) throws IOException {
File file = new File(fileName);
FileInputStream fis = new FileInputStream(file);
InputStreamReader isr = new InputStreamReader(fis, cs);
BufferedReader br = new BufferedReader(isr);
String line;
System.out.println("Read text file using InputStreamReader");
while((line = br.readLine()) != null){
//обработка строки
System.out.println(line);
}
br.close();
}
private static void readUsingBufferedReaderJava7(String fileName, Charset cs) throws IOException {
Path path = Paths.get(fileName);
BufferedReader br = Files.newBufferedReader(path, cs);
String line;
System.out.println("Read text file using BufferedReader Java 7 improvement");
while((line = br.readLine()) != null){
//обработка строки
System.out.println(line);
}
br.close();
}
private static void readUsingBufferedReader(String fileName) throws IOException {
File file = new File(fileName);
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
String line;
System.out.println("Read text file using BufferedReader");
while((line = br.readLine()) != null){
//обработка строки
System.out.println(line);
}
//закрытие ресурсов
br.close();
fr.close();
}
private static void readUsingScanner(String fileName) throws IOException {
Path path = Paths.get(fileName);
Scanner scanner = new Scanner(path);
System.out.println("Read text file using Scanner");
//чтение построчно
while(scanner.hasNextLine()){
//обработка каждой строки
String line = scanner.nextLine();
System.out.println(line);
}
scanner.close();
}
private static void readUsingFiles(String fileName) throws IOException {
Path path = Paths.get(fileName);
//чтение файла в массив байтов
byte[] bytes = Files.readAllBytes(path);
System.out.println("Read text file using Files class");
//чтение файла в список строк
@SuppressWarnings("unused")
List allLines = Files.readAllLines(path, StandardCharsets.UTF_8);
System.out.println(new String(bytes));
}
}
Выбор использования Scanner или BufferedReader или Files для чтения файла зависит от требований вашего проекта. Например, если вы просто записываете файл, вы можете использовать Files и BufferedReader. Если вы хотите разбить файл на основе разделителя, вы должны использовать класс Scanner. Прежде чем я завершу этот учебник, я хочу упомянуть о RandomAccessFile
. Мы можем использовать это для чтения текстового файла в Java.
RandomAccessFile file = new RandomAccessFile("/Users/pankaj/Downloads/myfile.txt", "r");
String str;
while ((str = file.readLine()) != null) {
System.out.println(str);
}
file.close();
Это все, что касается примеров программы чтения текстового файла в Java.
Source:
https://www.digitalocean.com/community/tutorials/java-read-text-file