Java - чтение текстового файла построчно
В этой статье рассматриваются 3 способа чтения текстового файла построчно:
-
Библиотеки Java NIO -
FileChannelдля чтения файлов. Это неблокирующий режим чтения файлов. -
BufferedReader- это операция блокировки, т. е. она блокирует любой другой запрос на чтение / запись к файлу до тех пор, пока он не завершит задачу. -
Apache Commons IO -
FileUtils, более простой способ чтения файлов построчно. Это тоже операция блокировки.
Входной файл для каждого примера такой же, как показан ниже:
src/com/techfou/data.txt
A B C D 1 2 3
1. Библиотеки Java NIO
В примере представлен простейший способ чтения небольшого файла. Поскольку это небольшой файл, мы напрямую выделяем необходимую память дляByteBuffer, используя размерFileChannel.
NIOFileReadExample.java
package com.techfou;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
public class NIOFileReadExample {
public static void main(String[] args) throws IOException {
RandomAccessFile file = new RandomAccessFile("src/com/example/data.txt", "r");
FileChannel channel = file.getChannel();
System.out.println("File size is: " + channel.size());
ByteBuffer buffer = ByteBuffer.allocate((int) channel.size());
channel.read(buffer);
buffer.flip();//Restore buffer to position 0 to read it
System.out.println("Reading content and printing ... ");
for (int i = 0; i < channel.size(); i++) {
System.out.print((char) buffer.get());
}
channel.close();
file.close();
}
}
При выполнении кода вы получите следующий результат:
File size is: 19 Reading content and printing ... A B C D 1 2 3
2. BufferedReader
ReadTextFile.java
package com.example;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
public class ReadTextFile {
public static void main(String[] args) throws IOException {
try {
File f = new File("src/com/example/data.txt");
BufferedReader b = new BufferedReader(new FileReader(f));
String readLine = "";
System.out.println("Reading file using Buffered Reader");
while ((readLine = b.readLine()) != null) {
System.out.println(readLine);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
Результат выполнения этого кода будет таким, как показано ниже:
Reading file using Buffered Reader A B C D 1 2 3
Note
БольшеBufferedReader
examples
3. Apache Commons IO
pom.xml
commons-io commons-io 2.5
FileIOUtilsExample
package com.example;
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
import java.util.List;
public class ReadTextFile {
public static void main(String[] args) throws IOException {
try {
File f = new File("src/com/example/data.txt");
System.out.println("Reading files using Apache IO:");
List lines = FileUtils.readLines(f, "UTF-8");
for (String line : lines) {
System.out.println(line);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
Результатом выполнения вышеуказанного кода будет:
Reading files using Apache IO: A B C D 1 2 3
Java 8
Попробуйте это -Java 8
stream to read file line by line