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

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

最近学习了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 里做文件复制很实用的方案兼顾通用性和运行效率。上面这段代码可以直接拿来使用只需要修改文件路径就能快速完成文件复制学习和日常开发都能用上。
http://www.gsyq.cn/news/1397464.html

相关文章:

  • Git闯关手记-从登录到烧录与IDE延迟
  • Servlet Session 跟踪
  • 《Ionic 创建 APP》
  • 在Nodejs后端服务中集成多模型API以提升应用智能
  • AI 解散了,Grok 还在,马斯克的 AI 野心走到哪了?| 深度分析
  • 局域网 Ubuntu GPU 机器安装 GitLab Runner (用于GitLab的CI/CD,类似于Jenkins的Agent)完整教程
  • Win10下Python虚拟环境激活报错:深入解析ExecutionPolicy权限与管理员模式解决方案
  • Keil C51代码分页机制解析与嵌入式内存管理实践
  • Python事件驱动架构实战:构建高可用异步系统
  • SignFormer:基于Vision Transformer的静态手语识别模型解析与实战
  • DevOps文化建设:打破团队壁垒的实践经验
  • Go语言用户系统:认证授权实战
  • 程序验证理论
  • KK-HF Patch:如何解决恋活!游戏体验的三大核心痛点?
  • Flutter MVC架构详解:经典架构模式实战
  • 告别DOS!2024年Windows下硬盘健康检查,这3款工具最省心(附DiskGenius详细操作)
  • 降AI率天花板!AI率92%暴降至5%!实测10款降AI率软件!薅羊毛技巧!
  • AI学习——Agent 基础概念
  • 【限时稀缺】OpenAI教育计划剩余配额告急!全国高校学生剩余免费额度实时监测(附抢注倒计时)
  • 独家拆解2026年Top 5 AI工具底层架构(含LLM Runtime兼容性报告):为什么92%的技术选型会误判编排层风险?
  • 奶牛发情体征及行为智能检测技术【附算法】
  • LyricsX桌面歌词插件实战指南:打造专属的macOS音乐体验
  • FreeRADIUS 802.1x从零配置实战:EAP-TLS证书链与五层排错
  • Ollama Python SDK工程实践:本地大模型服务化开发指南
  • 工业AOI实战:如何将HRIPCB数据集与YOLOv8结合,打造你自己的PCB缺陷检测系统
  • 5分钟掌握Ofd2Pdf:免费开源OFD转PDF工具终极指南
  • 从BCI Competition IV 2a数据集的.mat文件里,我们能挖出哪些宝藏信息?
  • 空间相关信道下大规模MIMO球面解码器算法与硬件架构优化
  • 现在不重构Lovable体育平台的API网关,Q3将面临3类监管处罚风险:OpenAPI 3.1合规改造倒计时
  • 2026年 徐州/江苏木门与全屋定制厂家推荐榜:实木门、复合门、烤漆门及门墙柜同色一体化优质品牌解析 - 品牌企业推荐师(官方)