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

Java 文件追加寫入模式詳解:FileOutputStream 構造函數第二參數 true 解決日志覆蓋問題

     編輯:程式設計疑難解答

問題代碼

FileOutputStream fos = new FileOutputStream("log.txt"); // 默認覆蓋
PrintStream ps = new PrintStream(fos);
ps.println(logLine); // 每次運行只保留最後一條

原因

FileOutputStream(String name) 默認 append = false,每次打開文件都會截斷(長度置 0),導致舊內容丟失。

解決:開啟追加模式

FileOutputStream fos = new FileOutputStream("log.txt", true); // 第二參數 true
// 或
FileOutputStream fos = new FileOutputStream(new File("log.txt"), true);

完整日志工具示例

public class Logger {
    private final PrintStream ps;
    public Logger(String file) throws FileNotFoundException {
        this.ps = new PrintStream(new FileOutputStream(file, true), true);
    }
    public void log(String msg) {
        ps.println("[" + LocalDateTime.now() + "] " + msg);
    }
}

進階建議

  • 高併發場景:使用 java.util.logging、Log4j2、Logback 等成熟日志框架,支持滾動、異步、分級。
  • 大文件:配合 BufferedOutputStream 提升吞吐。
  • 跨平台換行:用 System.lineSeparator() 而非硬編碼 \n。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved