fileinputstream/fileoutputstream适合二进制文件复制,需用try-with-resources关闭;应配合bufferedinputstream/bufferedoutputstream提升性能;文本文件优先用files工具类并显式指定utf-8编码。
用 FileInputStream 和 FileOutputStream 读写二进制文件最直接
如果只是复制图片、PDF 或任意非文本文件,用字节流最稳妥,不会因编码问题损坏内容。
常见错误是忘记关闭流或未处理异常导致资源泄漏。Java 7+ 推荐用 try-with-resources 自动释放:
try (FileInputStream fis = new FileInputStream("input.bin");
FileOutputStream fos = new FileOutputStream("output.bin")) {
int b;
while ((b = fis.read()) != -1) {
fos.write(b);
}
} catch (IOException e) {
// 处理异常
}
-
fis.read()返回int,但实际只用低 8 位,读到末尾返回-1 - 单字节循环效率低,生产环境应改用
byte[]缓冲区(如new byte[8192])配合read(byte[])和write(byte[], int, int) - 不要用
FileOutputStream覆盖关键文件前不加确认 —— 它默认会清空原文件
读写文本文件优先选 Files.readAllLines() 和 Files.write()
Java 7 引入的 Files 工具类封装了字符编码和资源管理,比手动套 InputStreamReader + BufferedReader 简洁得多。
典型场景:读取配置、日志行、CSV 片段。注意编码必须显式指定,否则依赖系统默认(Windows 是 GBK,Linux/macOS 通常是 UTF-8):
立即学习“Java免费学习笔记(深入)”;