全部学科
Python全栈
python
NodeJS全栈
nodejs
小程序首页
📅 2026-05-08 7 分钟 ✍️ juanwangdev

输入输出流

输入流读取数据,输出流写入数据,是Java IO的基本操作。

输入流

核心方法

方法说明
read()读取单个字节/字符,返回-1表示结束
read(byte[]/char[])读取到数组,返回实际读取数量
readAllBytes()读取所有字节(Java 9+)
close()关闭流释放资源

FileInputStream使用

Java
// 读取单个字节
InputStream is = new FileInputStream("test.txt");
int data;
while ((data = is.read()) != -1) {
    System.out.print((char) data);
}
is.close();

// 读取到字节数组
InputStream is = new FileInputStream("test.txt");
byte[] buffer = new byte[1024];
int len;
while ((len = is.read(buffer)) != -1) {
    // 处理buffer中0到len的数据
}
is.close();

// 读取全部字节(Java 9+)
InputStream is = new FileInputStream("test.txt");
byte[] allData = is.readAllBytes();
is.close();

FileReader使用

Java
Reader r = new FileReader("test.txt");
char[] buffer = new char[1024];
int len = r.read(buffer);
String content = new String(buffer, 0, len);
r.close();

输出流

核心方法

方法说明
write(int)写入单个字节/字符
write(byte[]/char[])写入数组数据
write(String)写入字符串(字符流)
flush()强制将缓冲数据写出
close()关闭流(自动flush)

FileOutputStream使用

Java
// 写入字节
OutputStream os = new FileOutputStream("test.txt");
os.write(65);  // 写入'A'的ASCII码
os.close();

// 写入字节数组
OutputStream os = new FileOutputStream("test.txt");
byte[] data = "Hello".getBytes();
os.write(data);
os.close();

// 追加写入
OutputStream os = new FileOutputStream("test.txt", true);  // true表示追加
os.write("追加内容".getBytes());
os.close();

FileWriter使用

Java
Writer w = new FileWriter("test.txt");
w.write("Hello World");
w.write("\n");  // 换行
w.close();

// 追加写入
Writer w = new FileWriter("test.txt", true);
w.write("追加内容");
w.close();

流的关闭

为什么必须关闭

  • 释放系统资源(文件句柄、内存)
  • 确保数据完整写入(自动flush)
  • 避免文件锁定

关闭方式

Java
// 传统方式
InputStream is = null;
try {
    is = new FileInputStream("test.txt");
    // 使用流
} finally {
    if (is != null) is.close();
}

// try-with-resources(Java 7+,推荐)
try (InputStream is = new FileInputStream("test.txt")) {
    // 使用流,自动关闭
}

推荐:使用try-with-resources自动关闭,避免资源泄漏。

flush的作用

何时需要flush

Java
OutputStream os = new FileOutputStream("test.txt");
os.write("Hello".getBytes());
os.flush();  // 强制立即写入磁盘
os.close();  // close时会自动flush

输出流有缓冲区时,数据先存缓冲区。flush强制将缓冲区数据写出。

read返回值说明

返回值含义
正数成功读取的字节/字符值(0-255)或数量
-1流结束,无更多数据
0未读取数据(数组长度为0时)
Java
// 判断流结束的标准方式
while ((len = is.read(buffer)) != -1) {
    // 处理读取的数据
}

要点总结

  • 输入流读取数据,输出流写入数据
  • read返回-1表示流结束
  • write写入数据,flush强制写出缓冲
  • FileOutputStream/FileWriter构造第二个参数true追加
  • 流必须关闭,推荐try-with-resources
  • close时会自动flush

📝 发现内容有误?点击此处直接编辑

← 上一篇 转换流
下一篇 → Arrays
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库