如何在 Java 中逐行读取一个大型文本文件

Hassan Saeed 2023年1月30日 2020年9月19日
  1. 在 Java 中 BufferedReader 逐行读取文件的方法
  2. 在 Java 中 Stream 逐行读取文件
  3. Java 中逐行读取文件的 Scanner 方法
如何在 Java 中逐行读取一个大型文本文件

本教程将讨论在 Java 中逐行高效读取大型文本文件的方法。

在 Java 中读取文本文件的方法有很多。但是,本教程是专门针对读取大型文本文件的,我们将讨论三种最有效的快速读取大型文本文件的方法。

在 Java 中 BufferedReader 逐行读取文件的方法

BufferedReaderJava 中的类从给定的字符输入流中读取文本,缓冲字符以提供字符、数组和行的高效读取。该方法为文件大小相当大的输入文件提供了高效的逐行读取。

下面的例子说明了如何使用 BufferedReader 来读取一个 txt 文件并逐行输出其内容。

import java.io.*;

public class Main {
    public static void main(String[] args) {
        String file = "my-file.txt";
        try(BufferedReader br = new BufferedReader(new FileReader(file))) 
        {
            String line;
            while ((line = br.readLine()) != null) {
            System.out.println(line);
            }
        }
        catch (IOException e) {
            System.out.println("An error occurred.");
            e.printStackTrace();
        }
    }
}

在 Java 中 Stream 逐行读取文件

Java 8 及以上版本的用户还可以使用 Stream 逐行读取大文件。下面的例子说明了如何使用 Stream 来读取一个 txt 文件,并逐行输出其内容。

import java.io.*;
import java.nio.file.*;
import java.util.stream.*;

public class Main {
    public static void main(String[] args) {
        String file = "my-file.txt";
        try (Stream<String> stream = Files.lines(Paths.get(fileName))) {
            stream.forEach(System.out::println);
        }
        catch (IOException e) {
            System.out.println("An error occurred.");
            e.printStackTrace();
        }
    }
}

以上讨论的两种方法会逐行读取输入文件,而不是将整个文件读到内存中。因此,如果我们有一个巨大的文件,不能完全读入内存,这两种方法的效率是很高的。

但是,如果我们的内存足够大,可以完全读取输入文件,我们也可以尝试下面的方法。

Java 中逐行读取文件的 Scanner 方法

Java 中的 Scanner 类是一个简单的文本 Scanner,它可以使用正则表达式解析原始类型和字符串。Scanner(File source) 将完整的文件读入内存,然后逐行处理。

下面的例子说明了如何使用 Scanner 读取一个 txt 文件并逐行输出其内容。

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String [] args) throws IOException {
        String fileName = "my-file.txt";
        Scanner scan = new Scanner(new File(fileName));
        while(scan.hasNextLine()){
            String line = scan.nextLine();
            System.out.println(line);
        }
    }
}

我们讨论了三种方法来读取 Java 中的大文本文件并逐行处理它。每种方法都有一些约束和优点,在决定在特定情况下使用哪种方法时,我们必须考虑这些约束和优点。

相关文章 - Java File