一. I/O流基本概念
1.1 流的概念
1.2 流的分类
分类标准 | 类型 | 说明 |
---|
数据流向 | 输入流(InputStream/Reader) | 从外部读取数据到程序 |
| 输出流(OutputStream/Writer) | 从程序写出数据到外部 |
数据类型 | 字节流(InputStream/OutputStream) | 以字节(8bit)为单位传输 |
| 字符流(Reader/Writer) | 以字符(16bit)为单位传输 |
功能 | 节点流 | 直接与数据源/目的地连接的流 |
| 处理流(包装流) | 对已有流进行包装/增强功能的流 |
2. 字节流体系
2.1 核心抽象类
-
InputStream:所有字节输入流的父类
-
OutputStream:所有字节输出流的父类
2.2 常用实现类
文件流
类 | 说明 |
---|
FileInputStream | 从文件读取字节 |
FileOutputStream | 向文件写入字节 |
// 文件复制示例
try (InputStream in = new FileInputStream("source.txt");OutputStream out = new FileOutputStream("target.txt")) {byte[] buffer = new byte[1024];int len;while ((len = in.read(buffer)) != -1) {out.write(buffer, 0, len);}
}
缓冲流
类 | 说明 |
---|
BufferedInputStream | 带缓冲的字节输入流 |
BufferedOutputStream | 带缓冲的字节输出流 |
// 使用缓冲流提高效率
try (InputStream in = new BufferedInputStream(new FileInputStream("source.txt"));OutputStream out = new BufferedOutputStream(new FileOutputStream("target.txt"))) {// 操作同上
}
对象流
类 | 说明 |
---|
ObjectInputStream | 读取序列化对象 |
ObjectOutputStream | 写入序列化对象 |
// 对象序列化示例
class Person implements Serializable {String name;int age;
}try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("person.dat"))) {oos.writeObject(new Person("张三", 25));
}try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("person.dat"))) {Person p = (Person) ois.readObject();
}
其他字节流
类 | 说明 |
---|
ByteArrayInputStream | 从字节数组读取 |
ByteArrayOutputStream | 写入到字节数组 |
DataInputStream | 读取基本数据类型 |
DataOutputStream | 写入基本数据类型 |
PipedInputStream | 管道输入流 |
PipedOutputStream | 管道输出流 |
三. 字符流体系
3.1 核心抽象类
-
Reader:所有字符输入流的父类
-
Writer:所有字符输出流的父类
3.2 常用实现类
文件流
类 | 说明 |
---|
FileReader | 从文件读取字符 |
FileWriter | 向文件写入字符 |
// 文本文件复制
try (Reader reader = new FileReader("source.txt");Writer writer = new FileWriter("target.txt")) {char[] buffer = new char[1024];int len;while ((len = reader.read(buffer)) != -1) {writer.write(buffer, 0, len);}
}
缓冲流
类 | 说明 |
---|
BufferedReader | 带缓冲的字符输入流 |
BufferedWriter | 带缓冲的字符输出流 |
// 逐行读取文本文件
try (BufferedReader br = new BufferedReader(new FileReader("text.txt"))) {String line;while ((line = br.readLine()) != null) {System.out.println(line);}
}
四. 文件操作辅助类
4.1 File类
File file = new File("test.txt");
System.out.println("是否存在: " + file.exists());
System.out.println("是文件: " + file.isFile());
System.out.println("路径: " + file.getAbsolutePath());
4.2 Path和Files (Java 7+)
Path path = Paths.get("test.txt");
Files.copy(path, Paths.get("copy.txt"));
List<String> lines = Files.readAllLines(path, StandardCharsets.UTF_8);
Files.write(path, "Hello".getBytes(), StandardOpenOption.APPEND);