如何在 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 中的大文字檔案並逐行處理它。每種方法都有一些約束和優點,在決定在特定情況下使用哪種方法時,我們必須考慮這些約束和優點。