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

Java I/O 核心流類別實戰應用指南

     編輯:Java 綜合教學

Java I/O 核心流類別實戰應用指南

Java I/O 體系龐大,掌握核心 13 個流類別足以應付絕大多數檔案讀寫場景。本文透過程式碼範例與圖解,系統梳理 FileInputStream、FileOutputStream、緩衝流、資料流、位元組陣列流與物件流的實際用法。

IO 流程圖

一、檔案位元組流:FileInputStream 與 FileOutputStream

最基礎的檔案讀寫流,直接操作檔案位元組。

FileInputStream - 檔案讀取

public class FileReadDemo {
    public static void main(String[] args) throws Exception {
        File file = new File("F:\\java\\workspace\\Fanshe\\src\\com\\cyg\\fanshe.java");
        FileInputStream fis = new FileInputStream(file);
        byte[] buffer = new byte[fis.available()];
        int len;
        while ((len = fis.read(buffer)) != -1) {
            // 處理讀取的資料
        }
        System.out.println(new String(buffer, 0, len));
        fis.close();
    }
}

FileOutputStream - 檔案寫入

public class FileWriteDemo {
    public static void main(String[] args) throws Exception {
        File file = new File("F:\\a.txt");
        FileOutputStream fos = new FileOutputStream(file);
        fos.write("admin".getBytes());
        fos.flush();
        fos.close();
    }
}

二、緩衝流:BufferedInputStream 與 BufferedOutputStream

緩衝流透過內部緩衝區陣列減少實際 I/O 操作次數,大幅提升讀寫效能,並支援 mark() 與 reset() 標記重置功能。

檔案複製範例

public class BufferedCopyDemo {
    public static void main(String[] args) throws Exception {
        FileInputStream fis = new FileInputStream("E:\\win10 64\\vmware.log");
        BufferedInputStream bis = new BufferedInputStream(fis);
        FileOutputStream fos = new FileOutputStream("E:\\a.txt");
        BufferedOutputStream bos = new BufferedOutputStream(fos);

        byte[] buffer = new byte[1024];
        int len;
        while ((len = bis.read(buffer)) != -1) {
            bos.write(buffer, 0, len);
        }
        // 關閉順序:先關外層包裝流,再關內層節點流
        bos.close();
        fos.close();
        bis.close();
        fis.close();
    }
}

緩衝流執行結果

三、資料流:DataOutputStream 與 DataInputStream

資料流允許以「機器無關」的方式寫入/讀取 Java 基本型別(int、boolean、char 等)與字串,適合結構化資料儲存。

寫入與讀取範例

public class DataStreamDemo {
    public static void main(String[] args) throws Exception {
        // 寫入
        FileOutputStream fos = new FileOutputStream("E:\\b.txt");
        DataOutputStream dos = new DataOutputStream(fos);
        dos.writeInt(10);
        dos.writeBytes("admin");
        dos.writeChar('a');
        dos.writeBoolean(true);
        dos.flush();
        dos.close();

        // 讀取(順序必須與寫入一致)
        FileInputStream fis = new FileInputStream("E:\\b.txt");
        DataInputStream dis = new DataInputStream(fis);
        System.out.println(dis.readInt());    // 10
        System.out.println(dis.readByte());   // 'a' 的位元組值
        System.out.println(dis.readChar());   // 'a'
        System.out.println(dis.readBoolean()); // true
        dis.close();
    }
}

資料流執行結果

四、位元組陣列流:ByteArrayInputStream 與 ByteArrayOutputStream

直接在記憶體中操作位元組陣列,不涉及實體檔案,適合暫存資料、單元測試或資料轉換中介。

範例:記憶體資料讀寫

public class ByteArrayStreamDemo {
    public static void main(String[] args) throws Exception {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        String str = "admin";
        baos.write(str.getBytes());
        
        byte[] buffer = new byte[200];
        ByteArrayInputStream bais = new ByteArrayInputStream(str.getBytes());
        bais.read(buffer);
        System.out.println(Arrays.toString(buffer)); // 輸出位元組陣列內容
    }
}

位元組陣列流執行結果

五、物件流:ObjectInputStream 與 ObjectOutputStream

支援物件序列化與反序列化,將物件完整寫入/讀出檔案。使用時類別必須實作 Serializable 介面。

(原文此處僅列標題,實務範例請參考 Java 序列化教學。)

六、字元緩衝流:BufferedReader 與 BufferedWriter

針對字元資料的高效讀寫,支援 readLine() 按行讀取,處理文字檔案更方便。

(原文此處僅列標題,建議搭配 FileReader/FileWriter 使用。)

核心心法總結

  • 節點流(如 FileInputStream)直接連接資料源;處理流/包裝流(如 BufferedInputStream)包裝節點流提供額外功能。
  • 「裝飾者模式」是 I/O 流設計核心:new BufferedInputStream(new FileInputStream(file))。
  • 關閉流原則:先開後關,先關外層包裝流,確保 flush() 生效。
  • 資料流讀寫順序必須完全一致,否則資料結構損壞。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved