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

Java 8 一行代碼讀取文件:Files.readAllBytes、readAllLines 與 Stream 流式處理全解析

     編輯:Java 綜合教學

前言

Java 7 引入 java.nio.file.Files 簡化文件操作,Java 8 進一步結合 Stream API 讓讀取文件變得極其簡潔。本文系統梳理各種「一行代碼」讀取姿勢及避坑指南。

核心 API 對比

方法返回類型適用場景編碼處理
Files.readAllBytes(Path)byte[]小文件整體讀取需手動指定 new String(bytes, StandardCharsets.UTF_8)
Files.readAllLines(Path, Charset)List<String>按行讀取需隨機訪問Java 8 默認 UTF-8,可顯式指定
Files.lines(Path, Charset)Stream<String>大文件流式處理、管道操作默認 UTF-8,支援自定義 Charset

實戰代碼示例

1. 讀取整個文件為字串(Java 7/8 通用)

// Java 7 風格
String content = new String(Files.readAllBytes(Paths.get("D:/jd.txt")), StandardCharsets.UTF_8);

// Java 8 靜態導入極簡寫法
import static java.nio.file.Files.readAllBytes;
import static java.nio.file.Paths.get;
import static java.lang.System.out;

out.println(new String(readAllBytes(get("d:/jd.txt"))));

2. 按行讀取為 List(需隨機訪問時)

List<String> lines = Files.readAllLines(Paths.get("D:/jd.txt"), StandardCharsets.UTF_8);
// 處理邏輯...
String full = String.join("", lines);

3. Stream 流式逐行處理(推薦大文件)

Files.lines(Paths.get("D:/jd.txt"), StandardCharsets.UTF_8)
     .forEach(System.out::println);

// 進階:過濾、轉換、收集
List<String> keywords = Files.lines(path, StandardCharsets.UTF_8)
    .filter(line -> line.contains("error"))
    .map(String::trim)
    .collect(Collectors.toList());

⚠️ 必須注意的四大坑

  1. 記憶體溢出風險:readAllBytes/readAllLines 會將整個文件載入記憶體,嚴禁用於大文件(>100MB),請改用 Files.lines() 流式處理。
  2. 編碼不匹配導致亂碼/異常:務必顯式指定 Charset(如 StandardCharsets.UTF_8),若文件為 GBK/ANSI 需對應調整,否則會拋 MalformedInputException。
  3. 資源洩漏:Files.lines() 返回的 Stream 實現了 AutoCloseable,建議使用 try-with-resources:
    try (Stream<String> stream = Files.lines(path, StandardCharsets.UTF_8)) {
        stream.forEach(System.out::println);
    }
  4. 文件不存在異常:均會拋 NoSuchFileException,需捕獲處理或檢查 Files.exists(path)。

總結建議

  • 小配置文件/模板:readAllBytes + 字串構造最簡潔。
  • 需逐行邏輯處理:Files.lines() + Stream API 既優雅又高效。
  • 大文件/內存敏感場景:只能用 Files.lines() 配合 try-with-resources。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved