首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java IO 流邊讀邊寫:文件加密轉換避免內容清空的正確姿勢

     編輯:程式設計疑難解答

很多初學者嘗試「一邊讀取文件內容、一邊加密寫回同一文件」,導致文件變空。原因在於:對同一文件同時開啟 FileInputStream 和 FileOutputStream,輸出流會立即截斷文件(長度歸零),輸入流隨後讀到的是空內容。

正確方案:臨時文件 / 內存緩衝

// 方案一:讀入內存處理後再寫回(小文件適用)
byte[] data = Files.readAllBytes(Paths.get("source.txt"));
byte[] encrypted = encrypt(data);
Files.write(Paths.get("source.txt"), encrypted);

// 方案二:寫入臨時文件,處理完替換原文件(大文件適用)
Path src = Paths.get("source.txt");
Path tmp = Files.createTempFile("enc-", ".tmp");
try (InputStream in = Files.newInputStream(src);
     OutputStream out = Files.newOutputStream(tmp)) {
    byte[] buf = new byte[8192];
    int len;
    while ((len = in.read(buf)) != -1) {
        out.write(encrypt(buf, len)); // 加密塊寫入
    }
}
Files.move(tmp, src, StandardCopyOption.REPLACE_EXISTING);

核心原則

  • 輸入流與輸出流**不能同時指向同一個文件路徑**
  • 文件拷貝/轉換的標準模式:read → process → write(to another path)
  • Java NIO.2 (Files, Path) 代碼更簡潔安全

推薦系統學習:Java IO 專題視頻

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved