Рубрики
Без рубрики

Java – Чтение текстового файла строка за строкой

– Java – Чтение текстового файла строка за строкой

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

  1. Библиотеки Java NIO – Файловый канал для чтения файлов. Это неблокирующий режим чтения файлов
  2. BufferedReader – Это блокирующая операция, т.е. она блокирует любой другой запрос на чтение/запись в файл до тех пор, пока он не выполнит задачу.
  3. 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:");

            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

Рекомендации

  1. Подробнее о BufferedReader
  2. Подробнее о программе чтения файлов
  3. Примеры буферизованного чтения
  4. Поток Java 8 для чтения файла строка за строкой
  5. Подробнее о функциях файлового канала
  6. Разница между методами ByteBuffer flip() и rewind()
  7. Явадоки ByteBuffer
  8. Файловые каналы Javadocs
  9. Руководство пользователя Apache Commons IO

Оригинал: “https://mkyong.com/java/java-read-a-text-file-line-by-line/”