任意文件复制(字节缓冲流)

发布时间:2026/5/27 1:12:10

任意文件复制(字节缓冲流) 最近学习了Java使用字节缓冲流实现任意文件复制才知道日常开发里经常会用到文件复制功能图片、视频、压缩包这类非文本文件用普通字符流会出问题字节流才是通用选择。单纯的基础字节流读写效率偏低今天就用 BufferedInputStream BufferedOutputStream 字节缓冲流来实现文件复制借助缓冲区减少磁盘交互读写速度会明显提升而且能适配电脑上所有格式的文件。一、实现思路1. 分别创建字节缓冲输入流、输出流绑定源文件和目标文件2. 定义字节数组充当缓冲区循环读取源文件数据同步写入新文件3. 读写完成后手动刷新缓冲区最后按顺序关闭流释放资源。二、完整代码工具类文件复制核心方法javaimport java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;/*** 文件复制工具类* 基于字节缓冲流实现支持全类型文件*/public class FileCopyUtil {/*** 文件复制方法* param srcPath 原文件路径* param destPath 复制后的文件路径*/public static void copyFile(String srcPath, String destPath) {BufferedInputStream bis null;BufferedOutputStream bos null;try {// 包装基础字节流创建缓冲流bis new BufferedInputStream(new FileInputStream(srcPath));bos new BufferedOutputStream(new FileOutputStream(destPath));// 自定义缓冲区一次读取1024字节byte[] buf new byte[1024];int length;// 循环读取数据读到文件末尾返回-1结束循环while ((length bis.read(buf)) ! -1) {bos.write(buf, 0, length);}// 强制刷新缓冲区保证剩余数据全部写入文件bos.flush();System.out.println(文件复制成功);} catch (IOException e) {System.out.println(文件复制失败请检查文件路径或文件是否存在);e.printStackTrace();} finally {// 关闭流遵循先开后关原则try {if (bos ! null) {bos.close();}if (bis ! null) {bis.close();}} catch (IOException e) {e.printStackTrace();}}}}测试类javapublic class CopyTest {public static void main(String[] args) {// 替换成你自己的文件路径String oldFile D:\\demo\\test.png;String newFile D:\\demo\\copy_test.png;// 调用方法完成复制FileCopyUtil.copyFile(oldFile, newFile);}}三、代码简单解读1. 缓冲流属于包装流不能单独使用必须依托 FileInputStream 、 FileOutputStream 基础字节流。2. 这里设置 1024 字节的数组作为缓冲区批量读写数据相比单字节读写能大幅降低 IO 次数。3. read() 方法的返回值是本次实际读取到的字节数当返回 -1 代表文件已经读完。4. flush() 方法建议主动调用避免缓冲区残留数据导致复制后的文件内容缺失。5. 流属于系统资源使用完毕一定要关闭关闭顺序和创建顺序相反即可。四、使用小提示1. Windows 系统路径需要用 \\ 做转义Linux、Mac 系统直接使用 / 2. 代码支持图片、视频、安装包、文档等所有格式不用担心乱码问题3. 如果是超大文件可以适当调大字节数组长度进一步提升复制效率4. 运行前确认源文件路径正确目标路径所在文件夹必须提前创建好。五、总结字节缓冲流是 Java IO 里做文件复制很实用的方案兼顾通用性和运行效率。上面这段代码可以直接拿来使用只需要修改文件路径就能快速完成文件复制学习和日常开发都能用上。

相关新闻