Java 讀取文本文件

有很多方法可以在java中讀取文本文件。 讓我們一一看看java讀取文本文件的不同方法。

Java讀取文本文件

有很多方法可以在java中讀取文本文件。 文本文件由字符組成,因此我們可以使用Reader類。 還有一些實用類可以在java中讀取文本文件。

  1. 使用Files類來讀取java文本文件
  2. 使用FileReader在java中讀取文本文件
  3. 使用BufferedReader來讀取java文本文件
  4. 使用Scanner類來讀取java中的文本文件

現在讓我們看看使用這些類來讀取java中的文本文件的示例。

使用java.nio.file.Files讀取Java文字檔

我們可以使用Files類別將文件的所有內容讀入位元組陣列中。Files類別還具有將所有行讀入字串列表的方法。Files類別是在Java 7中引入的,如果您想要加載文件的所有內容,這是一種不錯的方法。只有在處理小文件且需要將所有文件內容存入記憶體時才應使用此方法。

String fileName = "/Users/pankaj/source.txt";
Path path = Paths.get(fileName);
byte[] bytes = Files.readAllBytes(path);
List<String> allLines = Files.readAllLines(path, StandardCharsets.UTF_8);

使用java.io.FileReader在Java中讀取文字檔

您可以使用FileReader來獲取BufferedReader,然後逐行讀取文件。FileReader不支持編碼,並且使用系統默認編碼,因此這不是在Java中讀取文字檔的非常有效的方法。

String fileName = "/Users/pankaj/source.txt";
File file = new File(fileName);
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
String line;
while((line = br.readLine()) != null){
    //處理每行
    System.out.println(line);
}

使用java.io.BufferedReader在Java中讀取文字檔

BufferedReader 在你想逐行讀取文件並對其進行處理時很好。它非常適合處理大文件,並且還支持編碼。BufferedReader 是同步的,因此可以安全地從多個線程進行讀取操作。BufferedReader 的默認緩衝區大小為 8KB。

String fileName = "/Users/pankaj/source.txt";
File file = new File(fileName);
FileInputStream fis = new FileInputStream(file);
InputStreamReader isr = new InputStreamReader(fis, cs);
BufferedReader br = new BufferedReader(isr);

String line;
while((line = br.readLine()) != null){
     //處理每行
     System.out.println(line);
}
br.close();

在 Java 中使用 Scanner 讀取文本文件

如果你想逐行讀取文件或根據某些 Java 正則表達式,則可以使用 Scanner 類。Scanner 使用分隔模式將其輸入分成標記,默認情況下匹配空白字符。然後,可以使用各種 next 方法將結果標記轉換為不同類型的值。Scanner 類不是同步的,因此不是線程安全的。

Path path = Paths.get(fileName);
Scanner scanner = new Scanner(path);
System.out.println("Read text file using Scanner");
//逐行讀取
while(scanner.hasNextLine()){
    //處理每行
    String line = scanner.nextLine();
    System.out.println(line);
}
scanner.close();

Java 讀取文件示例

這是一個示例類,展示了如何在 Java 中讀取文本文件。示例方法使用了 Scanner、Files、帶有編碼支持的 BufferedReader 和 FileReader。

package com.journaldev.files;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;
import java.util.Scanner;

public class JavaReadFile {

    public static void main(String[] args) throws IOException {
        String fileName = "/Users/pankaj/source.txt";
        
        //使用Java 7 Files類來處理小文件,獲取完整的文件數據
        readUsingFiles(fileName);
        
        //使用Scanner類來處理大文件,逐行讀取
        readUsingScanner(fileName);
        
        //使用BufferedReader進行讀取,逐行讀取
        readUsingBufferedReader(fileName);
        readUsingBufferedReaderJava7(fileName, StandardCharsets.UTF_8);
        readUsingBufferedReader(fileName, StandardCharsets.UTF_8);
        
        //使用FileReader進行讀取,不支持編碼,效率低
        readUsingFileReader(fileName);
    }

    private static void readUsingFileReader(String fileName) throws IOException {
        File file = new File(fileName);
        FileReader fr = new FileReader(file);
        BufferedReader br = new BufferedReader(fr);
        String line;
        System.out.println("Reading text file using FileReader");
        while((line = br.readLine()) != null){
            //處理每一行
            System.out.println(line);
        }
        br.close();
        fr.close();
        
    }

    private static void readUsingBufferedReader(String fileName, Charset cs) throws IOException {
        File file = new File(fileName);
        FileInputStream fis = new FileInputStream(file);
        InputStreamReader isr = new InputStreamReader(fis, cs);
        BufferedReader br = new BufferedReader(isr);
        String line;
        System.out.println("Read text file using InputStreamReader");
        while((line = br.readLine()) != null){
            //處理每一行
            System.out.println(line);
        }
        br.close();
        
    }

    private static void readUsingBufferedReaderJava7(String fileName, Charset cs) throws IOException {
        Path path = Paths.get(fileName);
        BufferedReader br = Files.newBufferedReader(path, cs);
        String line;
        System.out.println("Read text file using BufferedReader Java 7 improvement");
        while((line = br.readLine()) != null){
            //處理每一行
            System.out.println(line);
        }
        br.close();
    }

    private static void readUsingBufferedReader(String fileName) throws IOException {
        File file = new File(fileName);
        FileReader fr = new FileReader(file);
        BufferedReader br = new BufferedReader(fr);
        String line;
        System.out.println("Read text file using BufferedReader");
        while((line = br.readLine()) != null){
            //處理每一行
            System.out.println(line);
        }
        //關閉資源
        br.close();
        fr.close();
    }

    private static void readUsingScanner(String fileName) throws IOException {
        Path path = Paths.get(fileName);
        Scanner scanner = new Scanner(path);
        System.out.println("Read text file using Scanner");
        //逐行讀取
        while(scanner.hasNextLine()){
            //處理每一行
            String line = scanner.nextLine();
            System.out.println(line);
        }
        scanner.close();
    }

    private static void readUsingFiles(String fileName) throws IOException {
        Path path = Paths.get(fileName);
        //將文件讀取為字節數組
        byte[] bytes = Files.readAllBytes(path);
        System.out.println("Read text file using Files class");
        //將文件讀取為字符串列表
        @SuppressWarnings("unused")
		List allLines = Files.readAllLines(path, StandardCharsets.UTF_8);
        System.out.println(new String(bytes));
    }

}

使用Scanner或BufferedReader或Files來讀取文件的選擇取決於您的項目要求。例如,如果您只是記錄文件,可以使用Files和BufferedReader。如果您想要基於分隔符解析文件,應該使用Scanner類。在結束本教程之前,我想提一下RandomAccessFile。我們可以使用它來在Java中讀取文本文件。

RandomAccessFile file = new RandomAccessFile("/Users/pankaj/Downloads/myfile.txt", "r");
String str;

while ((str = file.readLine()) != null) {
	System.out.println(str);
}
file.close();

這就是關於Java讀取文本文件示例程序的全部內容。

Source:
https://www.digitalocean.com/community/tutorials/java-read-text-file