В этой статье рассматриваются 3 способа чтения текстового файла строка за строкой:
- Библиотеки Java NIO –
Файловый канал
для чтения файлов. Это неблокирующий режим чтения файлов BufferedReader
– Это блокирующая операция, т.е. она блокирует любой другой запрос на чтение/запись в файл до тех пор, пока он не выполнит задачу.- Apache Commons IO –
FileUtils
, более простой способ чтения файлов строка за строкой. Это также блокирующая операция.
Входной файл для каждого примера такой же, как показано ниже:
A B C D 1 2 3
1. Библиотеки Java NIO
В примере представлен самый простой способ чтения небольшого файла. Поскольку это небольшой файл, мы напрямую выделяем необходимую память в ByteBuffer
, используя Файловый канал
размер.
package com.mkyong; 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/mkyong/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. БуферизоВанный считыватель
package com.mkyong; 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/mkyong/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
3. Общий доступ Apache IO
commons-io commons-io 2.5
package com.mkyong; 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/mkyong/data.txt"); System.out.println("Reading files using Apache IO:"); Listlines = 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
Рекомендации
- Подробнее о BufferedReader
- Подробнее о программе чтения файлов
- Примеры буферизованного чтения
- Поток Java 8 для чтения файла строка за строкой
- Подробнее о функциях файлового канала
- Разница между методами ByteBuffer flip() и rewind()
- Явадоки ByteBuffer
- Файловые каналы Javadocs
- Руководство пользователя Apache Commons IO
Оригинал: “https://mkyong.com/java/java-read-a-text-file-line-by-line/”