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

Java - чтение текстового файла построчно

В этой статье рассматриваются 3 способа чтения текстового файла построчно:

  1. Библиотеки Java NIO -FileChannel для чтения файлов. Это неблокирующий режим чтения файлов.

  2. BufferedReader - это операция блокировки, т. е. она блокирует любой другой запрос на чтение / запись к файлу до тех пор, пока он не завершит задачу.

  3. 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