摘要:本文系统讲解Java文件操作的核心类File及IO流体系,通过实例代码演示文件创建、读写操作与资源管理的最佳实践。
一、File类:文件系统抽象表示
核心功能
// 文件创建示例
File file = new File("data/config.ini");
if (!file.exists()) {
file.createNewFile(); // 可能抛出IOException
}
-
表示文件/目录路径的抽象
-
不要求路径实际存在(需显式创建)
关键操作
createNewFile() |
创建新文件 |
需处理IOException |
mkdir() |
创建单级目录 |
父目录需存在 |
delete() |
删除文件/空目录 |
非空目录需递归删除 |
renameTo() |
文件/目录重命名 |
目标路径需有效 |
元数据获取
File logFile = new File("logs/app.log");
System.out.println("文件大小: " + logFile.length() + "字节");
System.out.println("最后修改: " + new Date(logFile.lastModified()));
二、IO流体系架构
流类型对比
字节流 |
InputStream |
任意文件类型(如图片) |
FileInputStream |
OutputStream |
FileOutputStream |
||
字符流 |
Reader |
文本文件(UTF-8/GBK等) |
FileReader |
Writer |
FileWriter |
流操作核心步骤
graph LR
A[创建流对象] –> B[执行读写操作]
B –> C[关闭资源]
三、文件读写实战
文本文件写入(字符流)
try (FileWriter writer = new FileWriter("output.txt")) {
writer.write("用户操作日志记录"); // 自动创建文件
} // try-with-resources自动关闭
文本文件读取(字符流)
try (FileReader reader = new FileReader("input.txt")) {
char[] buffer = new char[1024];
int len;
while ((len = reader.read(buffer)) != -1) {
System.out.print(new String(buffer, 0, len));
}
}
二进制文件处理(字节流)
// 图片复制示例
try (FileInputStream in = new FileInputStream("source.jpg");
FileOutputStream out = new FileOutputStream("copy.jpg")) {
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = in.read(buffer)) != -1) {
out.write(buffer, 0, bytesRead);
}
}
四、性能优化技巧
缓冲流应用
// 缓冲流提升读写效率
try (BufferedReader br = new BufferedReader(new FileReader("large.txt"));
BufferedWriter bw = new BufferedWriter(new FileWriter("output.txt"))) {
String line;
while ((line = br.readLine()) != null) {
bw.write(line);
bw.newLine();
}
}
大文件处理建议
-
缓冲区大小设置为4KB-8KB(适配磁盘块大小)
-
避免单次读取超大数组(防止内存溢出)
五、资源管理规范
传统关闭方式缺陷
FileWriter fw = null;
try {
fw = new FileWriter("temp.txt");
fw.write("测试");
} finally {
if (fw != null) fw.close(); // 可能遗漏关闭
}
try-with-resources方案(Java7+)
try (FileOutputStream fos = new FileOutputStream("data.bin");
ObjectOutputStream oos = new ObjectOutputStream(fos)) {
oos.writeInt(1024); // 自动调用close()
} catch (IOException e) {
e.printStackTrace();
}
优势:
-
自动调用AutoCloseable.close()
-
避免资源泄漏
-
支持多资源声明
关键实践总结
路径处理原则
-
优先使用相对路径(适配不同环境)
-
规范化路径:file.getCanonicalPath()
编码注意事项
- 文本操作显式指定字符集:
new OutputStreamWriter(fos, StandardCharsets.UTF_8)
异常处理规范
-
区分检查异常(如IOException)和非检查异常
-
在方法签名声明或使用try-catch处理
通过合理使用File类管理元数据,配合恰当的IO流实现读写操作,结合try-with-resources确保资源安全,可构建高效可靠的文件处理模块。
IO流多线程学习:https://pan.quark.cn/s/5e9f153a70df
评论前必须登录!
注册