输入输出流
输入流读取数据,输出流写入数据,是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
📝 发现内容有误?点击此处直接编辑