首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 8 使用一行代碼讀取文件

     編輯:Java 相關知識

Java 8+ 文件讀取新姿勢:Stream API、NIO.2 一行搞定

Java 7 引入 java.nio.file.Files 和 Path,Java 8 再加上 Stream API,使文件讀取極其簡潔高效。本文展示從「讀全文件為字符串」到「流式逐行處理」的各種一行代碼寫法。

準備工作


import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.List;
import java.util.stream.Stream;

1. 讀取整個文件為單個字符串 (小文件)


// Java 7+ : Files.readAllBytes -> String (默認 UTF-8)
String content = new String(Files.readAllBytes(Paths.get("data.txt")));

// Java 11+ : 更簡潔的 Files.readString (自動 UTF-8)
String content = Files.readString(Paths.get("data.txt"));

2. 讀取所有行為 List<String> (小文件)


// Java 7+ : 指定編碼
List lines = Files.readAllLines(Paths.get("data.txt"), StandardCharsets.UTF_8);

// Java 11+ : 自動 UTF-8
List lines = Files.readAllLines(Paths.get("data.txt"));

3. 一行代碼逐行處理/打印 (推薦:流式、內存友好)


// Java 8+ : Files.lines() 返回 Stream,自動關閉資源 (需 try-with-resources)
try (Stream stream = Files.lines(Paths.get("data.txt"), StandardCharsets.UTF_8)) {
    stream.forEach(System.out::println); // 打印每行
    // 或進行過濾、映射、聚合等流操作
    long count = stream.filter(l -> l.contains("error")).count();
}

// Java 11+ : 更簡潔 (隱式 try-with-resources 不支持,仍需 try 塊)
// 但可寫為一行邏輯:
Files.lines(Paths.get("data.txt")).forEach(System.out::println); // 簡略寫法,異常拋出

4. 寫入文件一行代碼


// 寫入字符串列表 (覆蓋模式)
Files.write(Paths.get("out.txt"), lines, StandardCharsets.UTF_8);

// 寫入單個字符串 (追加模式)
Files.writeString(Paths.get("out.txt"), "新內容\n", StandardCharsets.UTF_8, StandardOpenOption.APPEND);

關鍵優勢

  • 自動資源管理:Files.lines() 返回的 Stream 實現了 AutoCloseable,配合 try-with-resources 確保文件句柄及時釋放。
  • 流式處理:Files.lines() 惰性讀取,適合大文件 (GB 級),不會一次性載入內存導致 OOM。
  • 函數式操作:無縫接入 filter/map/collect 等流操作,代碼聲明式、可讀性強。
  • 編碼安全:顯式指定 StandardCharsets.UTF_8 避免平台默認編碼差異導致亂碼。

注意事項

  • readAllBytes/readAllLines 會將整個文件載入內存,嚴禁用於大文件。
  • 文件不存在會拋出 NoSuchFileException,需捕獲處理。
  • 編碼不匹配 (如 GBK 文件用 UTF-8 讀) 會拋出 MalformedInputException 或產生亂碼,需確認文件編碼。
  • Windows 路徑分隔符用雙反斜杠 \\ 或正斜杠 /。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved