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

Java IO 實戰:字符流與字節流文件讀寫完整指南

     編輯:Java 綜合教學

IO 體系速覽

  • 字節流:InputStream/OutputStream,最小單位 byte,適用圖片、視頻、二進制文件。
  • 字符流:Reader/Writer,最小單位 char(2 字節),自動處理編碼轉換,適用文本文件。
IO流體系圖

字符流實戰:緩衝行讀寫

package lib;

import java.io.*;

public class CharStreamDemo {
    private final File file = new File("F:\\test.txt");

    // 寫入:PrintWriter + FileWriter,true=追加模式
    public void write() throws IOException {
        try (PrintWriter pw = new PrintWriter(new FileWriter(file, true))) {
            pw.write("測試寫入字符串到文件中2");
        }
    }

    // 讀取:BufferedReader 按行讀取
    public String read() throws IOException {
        StringBuilder sb = new StringBuilder();
        try (BufferedReader br = new BufferedReader(new FileReader(file))) {
            String line;
            while ((line = br.readLine()) != null) {
                sb.append(line);
            }
        }
        return sb.toString();
    }

    public static void main(String[] args) throws IOException {
        CharStreamDemo demo = new CharStreamDemo();
        demo.write();
        System.out.println("文件內容:" + demo.read());
    }
}

關鍵點:try-with-resources 自動關閉流(JDK 7+),FileWriter(file, true) 追加寫入。

字節流實戰:文件複製

package com.file.test2;

import java.io.*;

public class ByteStreamCopy {
    public static void main(String[] args) throws IOException {
        File src = new File("D:\\test.txt");      // 必須存在
        File dest = new File("D:\\test2.txt");    // 目標文件
        byte[] buffer = new byte[1024];           // 1KB 緩衝區
        int len;

        try (FileInputStream in = new FileInputStream(src);
             FileOutputStream out = new FileOutputStream(dest)) {
            while ((len = in.read(buffer)) != -1) {
                out.write(buffer, 0, len);        // 精確寫入讀取長度
            }
            // 若需控制台輸出複製內容:
            // System.out.println(new String(buffer, 0, len));
        }
    }
}

注意:源文件必須存在,否則拋 FileNotFoundException。字節流不處理編碼,直接搬運二進制。

選型建議

場景推薦流原因
文本配置、日志、源碼字符流自動編碼轉換,按行處理方便
圖片、音視頻、壓縮包字節流無編碼概念,逐字節完整複製
混合場景字節流 + InputStreamReader/OutputStreamWriter字節流做傳輸,字符流做解碼

常見坑點

  • 忘記 close() 導致文件鎖定或資源洩漏 → 用 try-with-resources。
  • 字節流讀取文本直接 new String(bytes) 會用平台默認編碼,跨平台亂碼 → 顯式指定 StandardCharsets.UTF_8。
  • 字符流複製二進制文件會破壞數據(編碼轉換導致字節序改變)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved