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

Java IO 實戰練習:FileWriter 與 FileReader 讀寫文字檔案完整範例

     編輯:Java 綜合教學

Java IO 實戰練習:文字檔案讀寫基礎範例

本範例示範如何使用 FileWriter 寫入學號與姓名至文字檔,再使用 FileReader 讀取並顯示在螢幕上。適合 Java 初學者掌握基礎 IO 操作流程。

完整程式碼

import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;

public class TextRw {
    public static void main(String[] args) {
        File file = new File("d:/TextRw.txt");
        
        try {
            // 1. 建立檔案(若不存在)
            if (!file.exists()) {
                file.createNewFile();
                System.out.println("檔案建立成功");
            }
            
            // 2. 寫入資料
            try (FileWriter fw = new FileWriter(file)) {
                fw.write("學號:10001,姓名:唐楓");
                System.out.println("資料寫入完成");
            }
            
            // 3. 讀取資料
            try (FileReader fr = new FileReader(file)) {
                char[] buffer = new char[1024];
                int charsRead = fr.read(buffer);
                String content = new String(buffer, 0, charsRead);
                System.out.println("檔案內容:" + content);
            }
            
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

關鍵點解析

1. 檔案建立與存在性檢查

File file = new File("d:/TextRw.txt");
if (!file.exists()) {
    file.createNewFile();  // 原子性建立,避免競態條件
}

2. 寫入:FileWriter(字元流)

  • 直接寫入字串,自動處理編碼(預設平台編碼)
  • 建議明確指定編碼:new OutputStreamWriter(new FileOutputStream(file), "UTF-8")
  • 使用 try-with-resources 確保自動關閉

3. 讀取:FileReader(字元流)

  • 使用字元緩衝陣列 char[] 批次讀取
  • read(char[]) 回傳實際讀取字元數
  • 透過 new String(buffer, 0, charsRead) 精確建立字串

進階改良版(含編碼指定與緩衝優化)

import java.io.*;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Paths;

public class TextRwAdvanced {
    private static final String FILE_PATH = "d:/TextRw.txt";
    private static final String CONTENT = "學號:10001,姓名:唐楓";

    public static void main(String[] args) {
        // 寫入:指定 UTF-8 編碼 + 緩衝
        try (BufferedWriter writer = new BufferedWriter(
                new OutputStreamWriter(new FileOutputStream(FILE_PATH), StandardCharsets.UTF_8))) {
            writer.write(CONTENT);
            writer.newLine();
            System.out.println("寫入完成(UTF-8)");
        } catch (IOException e) {
            e.printStackTrace();
        }

        // 讀取:NIO.2 一行程式碼(Java 7+)
        try {
            String content = Files.readString(Paths.get(FILE_PATH), StandardCharsets.UTF_8);
            System.out.println("檔案內容:" + content.trim());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

常見問題與注意事項

問題原因解決方案
中文亂碼平台預設編碼不一致(Windows GBK vs Linux UTF-8)明確指定 StandardCharsets.UTF_8
資料截斷緩衝區大小不足使用 BufferedWriter/BufferedReader 或 NIO Files.readString
檔案鎖定未正確關閉流強制使用 try-with-resources
路徑分隔符Windows \ vs Unix /使用 File.separator 或 Paths.get()

效能比較建議

  • 小檔案(<1MB):Files.readString/writeString 最簡潔
  • 中型檔案:BufferedReader/BufferedWriter 逐行處理
  • 大檔案(>100MB):Files.lines() 串流處理或 MappedByteBuffer 記憶體映射

掌握 FileWriter/FileReader 基礎操作是 Java IO 入門關鍵,實際專案建議優先使用 NIO.2 (java.nio.file.Files) 簡化程式碼並提升可靠性。

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