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

Java IO 流體系全景:Stream、File、控制台交互與文件讀寫實戰

     編輯:Java 相關知識

java.io 包提供了強大而靈活的 I/O 支持,涵蓋基本類型、對象、字符集等多種格式,廣泛應用於文件傳輸、網絡編程。本文通過示例逐步講解核心功能。

一、控制台輸入

系統標準輸入 System.in 為字節流,通常包裝為字符流:

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

1. 讀取單字符:read()

int read() throws IOException
// 返回字符整數值,流末尾返回 -1
char c;
do {
    c = (char) br.read();
    System.out.println(c);
} while (c != 'q');

2. 讀取字符串:readLine()

String readLine() throws IOException
String str;
do {
    str = br.readLine();
    System.out.println(str);
} while (!str.equals("end"));

二、控制台輸出

System.out 為 PrintStream 對象,常用 print()/println()。底層 write(int byteval) 寫入低 8 位字節,較少直接使用。

三、文件讀寫核心流

輸入輸出流類層次圖

1. FileInputStream:文件字節輸入流

// 方式一:文件名字符串
InputStream f = new FileInputStream("C:/java/hello");
// 方式二:File 對象
File file = new File("C:/java/hello");
InputStream f = new FileInputStream(file);

常用方法:

方法說明
close()關閉流,釋放資源
read()讀取單字節,返回 int,末尾 -1
read(byte[] b)批量讀取至字節數組,返回實際讀取數
available()可無阻塞讀取的字節數

2. FileOutputStream:文件字節輸出流

OutputStream f = new FileOutputStream("C:/java/hello"); // 文件不存在自動創建
File file = new File("C:/java/hello");
OutputStream f = new FileOutputStream(file);

常用方法:

方法說明
close()關閉流,釋放資源
write(int b)寫入單字節(低 8 位)
write(byte[] b)寫入字節數組

3. 完整複製示例(二進制安全)

public class FileStreamTest {
    public static void main(String[] args) {
        try {
            byte[] bWrite = {11, 21, 3, 40, 5};
            OutputStream os = new FileOutputStream("test.txt");
            for (int x = 0; x < bWrite.length; x++) {
                os.write(bWrite[x]);
            }
            os.close();

            InputStream is = new FileInputStream("test.txt");
            int size = is.available();
            for (int i = 0; i < size; i++) {
                System.out.print((char) is.read() + " ");
            }
            is.close();
        } catch (IOException e) {
            System.out.print("Exception");
        }
    }
}

4. 字符流處理中文(解決亂碼)

public class FileStreamTest2 {
    public static void main(String[] args) throws IOException {
        File f = new File("a.txt");
        FileOutputStream fop = new FileOutputStream(f);
        OutputStreamWriter writer = new OutputStreamWriter(fop, "UTF-8");
        writer.append("中文輸入");
        writer.append("\r\n");
        writer.append("English");
        writer.close(); // 刷新緩衝區並關閉
        fop.close();

        FileInputStream fip = new FileInputStream(f);
        InputStreamReader reader = new InputStreamReader(fip, "UTF-8");
        StringBuffer sb = new StringBuffer();
        while (reader.ready()) {
            sb.append((char) reader.read());
        }
        System.out.println(sb.toString());
        reader.close();
        fip.close();
    }
}

四、文件與目錄操作

1. File 類:文件/目錄抽象

  • mkdir():創建單級目錄
  • mkdirs():創建多級目錄(含父目錄)
  • isDirectory():判斷是否目錄
  • list():列出目錄下文件/子目錄名

2. 創建目錄示例

String dirname = "/tmp/user/java/bin";
File d = new File(dirname);
d.mkdirs(); // 自動創建父目錄

Java 自動識別跨平台路徑分隔符(/ 在 Windows 也可用)。

3. 讀取目錄內容示例

File f1 = new File("/tmp");
if (f1.isDirectory()) {
    String[] s = f1.list();
    for (String name : s) {
        File f = new File("/tmp/" + name);
        System.out.println(name + (f.isDirectory() ? " is a directory" : " is a file"));
    }
}

五、輔助流類

  • FileReader/FileWriter:字符流便利類,內部默認編碼
  • DataInputStream/DataOutputStream:基本類型讀寫
  • ByteArrayInputStream/ByteArrayOutputStream:內存緩衝區流

掌握流體系層次、選擇合適流組合(字節/字符、緩衝、轉換),是高效處理 I/O 的關鍵。

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