以下是《Java SE 文件IO》的完整解析教程,涵盖 Java 中文件输入输出的基础与高级用法,包括流的分类、关键类、常见操作、代码示例及最佳实践。
Java SE 文件 IO 教程
📘 目录
- 文件 IO 简介
- 字节流 vs 字符流
- 常用输入输出类
- 文件的读取与写入
- 缓冲流提升效率
- 文件复制示例
- NIO 简介与对比
- 文件 IO 最佳实践
- 参考资料
1. 文件 IO 简介
Java 的 IO(Input/Output)机制通过流的形式实现数据读写操作,支持文件、网络、内存等不同数据源。文件 IO 是其中最常用的功能之一。
2. 字节流 vs 字符流
类型 | 基础类 | 适用场景 |
---|---|---|
字节流 | InputStream / OutputStream | 任意类型的数据(如图像、音频) |
字符流 | Reader / Writer | 文本文件(自动处理编码) |
3. 常用输入输出类
🔹 字节流类:
FileInputStream
FileOutputStream
BufferedInputStream
BufferedOutputStream
🔹 字符流类:
FileReader
FileWriter
BufferedReader
BufferedWriter
4. 文件的读取与写入
🔸 字节流读取文件
import java.io.FileInputStream;
public class ByteReadExample {
public static void main(String[] args) throws Exception {
FileInputStream fis = new FileInputStream("example.txt");
int b;
while ((b = fis.read()) != -1) {
System.out.print((char) b);
}
fis.close();
}
}
🔸 字符流写入文件
import java.io.FileWriter;
public class CharWriteExample {
public static void main(String[] args) throws Exception {
FileWriter fw = new FileWriter("output.txt");
fw.write("你好,Java 文件IO!");
fw.close();
}
}
5. 缓冲流提升效率
缓冲流通过内部缓冲区减少磁盘操作次数,性能更优。
示例:使用 BufferedReader
读取
import java.io.BufferedReader;
import java.io.FileReader;
public class BufferedReadExample {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new FileReader("example.txt"));
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
}
br.close();
}
}
6. 文件复制示例
import java.io.FileInputStream;
import java.io.FileOutputStream;
public class FileCopy {
public static void main(String[] args) throws Exception {
FileInputStream in = new FileInputStream("source.txt");
FileOutputStream out = new FileOutputStream("dest.txt");
byte[] buffer = new byte[1024];
int length;
while ((length = in.read(buffer)) > 0) {
out.write(buffer, 0, length);
}
in.close();
out.close();
System.out.println("复制完成!");
}
}
7. Java NIO 简介
Java NIO(New IO)提供更高性能的文件读写:
示例:NIO 读取文件所有内容
import java.nio.file.*;
import java.util.List;
public class NIOReadExample {
public static void main(String[] args) throws Exception {
List<String> lines = Files.readAllLines(Paths.get("example.txt"));
lines.forEach(System.out::println);
}
}
NIO 优势:
- 支持内存映射
- 更适合处理大文件或多线程并发
- 提供非阻塞 IO 支持(配合 Selector)
8. 文件 IO 最佳实践
- ✅ 始终关闭流(推荐使用 try-with-resources)
- ✅ 使用缓冲流优化性能
- ✅ 避免一次读取太多数据
- ✅ 处理编码问题(如 UTF-8)
- ✅ 异常处理不可忽视,防止数据丢失
发表回复