《Java开发十日速成:零基础保姆级教程(附20000字实战+流程图)》
副标题:挑战高薪!十天掌握Java核心技能,小白也能写出企业级代码
Day6:IO流与文件操作
学习目标:
- 掌握Java IO流的核心概念及使用场景
- 理解字节流与字符流的区别及其底层实现
- 学习序列化与反序列化的基本用法
- 完成实战项目:Excel文件读写(基于Apache POI库)
6.1 Java IO流概述
IO流分类
Java IO流分为两大类[[4]]:
- 字节流(Byte Stream):以字节为单位处理数据
- 输入流:
InputStream
- 输出流:
OutputStream
- 输入流:
- 字符流(Character Stream):以字符为单位处理数据(适合文本文件)
- 输入流:
Reader
- 输出流:
Writer
- 输入流:
字节流 vs 字符流
特性 | 字节流 | 字符流 |
---|---|---|
数据单位 | 字节(8位) | 字符(16位) |
适用场景 | 图片、视频等二进制文件 | 文本文件 |
缓冲性能 | 需手动优化 | 自带缓冲机制 |
代码示例:
import java.io.*;
public class FileStreamDemo {
public static void main(String[] args) throws IOException {
// 字节流写入文件
try (OutputStream out = new FileOutputStream("output.txt")) {
out.write("Hello, Byte Stream!".getBytes());
}
// 字符流读取文件
try (Reader reader = new FileReader("output.txt")) {
char[] buffer = new char[1024];
int len = reader.read(buffer);
System.out.println(new String(buffer, 0, len));
}
}
}
6.2 缓冲流的使用
缓冲流的优势
- 提高IO效率,减少磁盘访问次数
- 常见实现:
BufferedInputStream
、BufferedReader
代码示例:
import java.io.*;
public class BufferedStreamDemo {
public static void main(String[] args) throws IOException {
// 使用缓冲流写入文件
try (BufferedWriter writer = new BufferedWriter(new FileWriter("buffered.txt"))) {
writer.write("Hello, Buffered Stream!");
}
// 使用缓冲流读取文件
try (BufferedReader reader = new BufferedReader(new FileReader("buffered.txt"))) {
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
}
}
}
6.3 序列化与反序列化
序列化的定义
- 将对象的状态保存到文件中,便于持久化存储或网络传输[[5]]
- 实现
Serializable
接口即可支持序列化
代码示例:
import java.io.*;
class Person implements Serializable {
private static final long serialVersionUID = 1L;
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "姓名:" + name + ", 年龄:" + age;
}
}
public class SerializationDemo {
public static void main(String[] args) throws IOException, ClassNotFoundException {
// 序列化对象到文件
try (ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("person.dat"))) {
Person person = new Person("Alice"