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

Java IO 學習筆記(四):PrintWriter 與 PrintStream 打印流詳解

     編輯:Java 相關知識

打印流核心特性

Java 提供兩種打印流:PrintWriter(字元流)與 PrintStream(位元組流)。它們共同特點:

  • 提供重載的 print()/println() 支援多種資料型別
  • 操作不拋出異常,內部自行捕獲
  • System.out.print(Object) 實際呼叫物件的 toString()

自動 Flush 機制差異

PrintStream 預設即具備自動 flush(遇換行符自動刷新)。
PrintWriter 預設不自動 flush,必須在建構式指定 new PrintWriter(writer, true) 才啟用自動刷新(僅在 println()/printf()/format() 觸發)。

建構式靈活性

PrintWriter 可包裝 Writer 或直接包裝 OutputStream/File/String 路徑;PrintStream 則專注位元組流包裝。

實作範例 1:重導向 System.out 至檔案

public class PrintStreamTest {
    public static void main(String[] args) {
        PrintStream ps = null;
        FileOutputStream fos = null;
        try {
            fos = new FileOutputStream("E:/test/output.txt");
            ps = new PrintStream(fos);
            System.setOut(ps); // 標準輸出重導向
            for (int i = 0; i < 3000; i++) {
                System.out.print(i + " ");
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } finally {
            closeQuietly(ps);
            closeQuietly(fos);
        }
    }
}

實作範例 2:控制台輸入同步寫入檔案(簡易日誌)

public class PrintWriterTest {
    public static void main(String[] args) {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        PrintWriter pw = null;
        try {
            // autoFlush = true
            pw = new PrintWriter(new FileWriter("E:/test/log.txt", true), true);
            String line;
            while ((line = br.readLine()) != null) {
                if ("exit".equals(line)) break;
                System.out.println(line);           // 顯示於控制台
                pw.println("-----------------------"); // 寫入檔案
                pw.println(line);
            }
            pw.println("-------------" + new Date() + "------------");
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            closeQuietly(br);
            closeQuietly(pw);
        }
    }
}

關鍵總結

  1. PrintWriter 需顯式啟用 autoFlush 才會自動刷新,否則資料停留在緩衝區
  2. 兩者皆不拋出 IOException,可透過 checkError() 檢查狀態
  3. System.out 本質是 PrintStream,可重導向實現日誌落檔
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved