java.io 包提供了強大而靈活的 I/O 支持,涵蓋基本類型、對象、字符集等多種格式,廣泛應用於文件傳輸、網絡編程。本文通過示例逐步講解核心功能。
系統標準輸入 System.in 為字節流,通常包裝為字符流:
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int read() throws IOException
// 返回字符整數值,流末尾返回 -1
char c;
do {
c = (char) br.read();
System.out.println(c);
} while (c != 'q');
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 位字節,較少直接使用。

// 方式一:文件名字符串
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() | 可無阻塞讀取的字節數 |
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) | 寫入字節數組 |
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");
}
}
}
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();
}
}
mkdir():創建單級目錄mkdirs():創建多級目錄(含父目錄)isDirectory():判斷是否目錄list():列出目錄下文件/子目錄名String dirname = "/tmp/user/java/bin";
File d = new File(dirname);
d.mkdirs(); // 自動創建父目錄
Java 自動識別跨平台路徑分隔符(/ 在 Windows 也可用)。
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"));
}
}
掌握流體系層次、選擇合適流組合(字節/字符、緩衝、轉換),是高效處理 I/O 的關鍵。