Java文件操作与IO流核心技术解析
摘要:本文系统讲解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 LRA[创建流对象] --> 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