如何在 Java 中逐行读取一个大型文本文件
Hassan Saeed
2023年1月30日
2020年9月19日
本教程将讨论在 Java 中逐行高效读取大型文本文件的方法。
在 Java 中读取文本文件的方法有很多。但是,本教程是专门针对读取大型文本文件的,我们将讨论三种最有效的快速读取大型文本文件的方法。
在 Java 中 BufferedReader
逐行读取文件的方法
BufferedReader
Java 中的类从给定的字符输入流中读取文本,缓冲字符以提供字符、数组和行的高效读取。该方法为文件大小相当大的输入文件提供了高效的逐行读取。
下面的例子说明了如何使用 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 中的大文本文件并逐行处理它。每种方法都有一些约束和优点,在决定在特定情况下使用哪种方法时,我们必须考虑这些约束和优点。