当前位置: 首页 > news >正文

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

最近学习了Java使用字节缓冲流实现任意文件复制,才知道日常开发里经常会用到文件复制功能,图片、视频、压缩包这类非文本文件,用普通字符流会出问题,字节流才是通用选择。
单纯的基础字节流读写效率偏低,今天就用 BufferedInputStream + BufferedOutputStream 字节缓冲流来实现文件复制,借助缓冲区减少磁盘交互,读写速度会明显提升,而且能适配电脑上所有格式的文件。

一、实现思路

1. 分别创建字节缓冲输入流、输出流,绑定源文件和目标文件;
2. 定义字节数组充当缓冲区,循环读取源文件数据,同步写入新文件;
3. 读写完成后手动刷新缓冲区,最后按顺序关闭流,释放资源。

二、完整代码

工具类(文件复制核心方法)

java
import 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();
}
}
}
}


测试类

java
public 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 里做文件复制很实用的方案,兼顾通用性和运行效率。上面这段代码可以直接拿来使用,只需要修改文件路径就能快速完成文件复制,学习和日常开发都能用上。

http://www.jsqmd.com/news/893636/

相关文章:

  • 影刀RPA店群自动化声明式配置管理:从命令式脚本到期望状态调和
  • 8个Shell命令提升数据科学效率的实战指南
  • 用CloudCompare和Python处理DublinCityDataSet点云数据,我踩了这些坑(附完整代码)
  • Day36
  • Kubernetes服务网格:Istio的高级配置与最佳实践
  • SPSS 25 安装 PSM 插件完整流程(含R环境配置与避坑指南)
  • CHKDSK命令详解:当你的硬盘提示0x80070570时,Windows到底在后台帮你修复了什么?
  • 2026诚信复合防静电地板厂家名录:全铝防静电地板厂家、成都防静电地板厂家、防静电全钢地板厂家、防静电木基地板厂家选择指南 - 优质品牌商家
  • Thief摸鱼神器:跨平台办公助手的终极解决方案
  • 避开这些坑!Proteus仿真SRF04超声波模块的3个关键点与LCD1602显示优化
  • Google Agent Skills:云原生智能体能力库深度解析
  • Attention:我们都活在彼此的注意力机制里
  • 微机原理-实验4 8254 定时/计数器实验
  • ABAP:对外发布Web Service
  • 前端开发者的职业发展规划
  • 2026年Q2河北玻璃钢通风管道定制厂家网址选择指南 - 2026年企业资讯
  • 三菱FX5U PLC与上位机通信新选择:SLMP协议 vs MX Component插件,到底该怎么选?
  • 2026年当前乌鲁木齐行业知名的隔层实力厂商如何选择:专业指南与实力厂商推荐 - 2026年企业资讯
  • OPC 中国是做什么的?一文读懂 OPC 与 OPD 体系
  • 从‘发热怪’到‘静音王’:手把手教你用磁珠曲线,搞定开关电源的EMI超标难题
  • Servlet Session 跟踪
  • 复数流态矩阵计算器 · 使用说明
  • 2026年5月行业内上海AI产业智能体公司如何选厂家推荐榜,政企智能体、营销智能体、客服智能体厂家选择指南 - 海棠依旧大
  • Kubernetes多集群管理:管理大规模K8s环境的最佳实践
  • 全球十大男装排名公布,水甬后第一名耐穿性能拉满
  • 从Wi-Fi到汽车:聊聊FMCW雷达技术怎么悄悄改变了我们的生活
  • 5. 【穷举-作业-编程题-3】求阿姆斯特朗数
  • 【Agent 学习日记】我们来说说 Agent 的基础框架是什么?
  • 动态目标跨镜无缝接力追踪技术——移民局出入境证件查验辅助场景中的空间智能应用白皮书
  • 【从零搭建本地电商智能客服 Agent:Dify+Ollama+Qwen3.5 部署全流程】