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

Java 文件复制(字符 / 字节缓冲流)

一、核心概念
Java 文件复制,本质就是把文件数据从一个流读到内存,再从内存写到另一个流。根据文件类型不同,我们用两种不同的流:
字符缓冲流(BufferedReader/BufferedWriter):专门处理文本文件(.txt/.java/.md 等),最常用。
字节缓冲流(BufferedInputStream/BufferedOutputStream):万能复制,支持所有文件(文本、图片、视频、音频等)。

二、文本文件复制(字符缓冲流)
适合场景:纯文本文件,效率比普通字符流高很多。
代码示例

import java.io.*; public class TextCopy { public static void main(String[] args) { // 源文件路径 String srcPath = "src/original.txt"; // 目标文件路径 String destPath = "src/copy.txt"; // 用try-with-resources自动关闭流 try ( BufferedReader br = new BufferedReader(new FileReader(srcPath)); BufferedWriter bw = new BufferedWriter(new FileWriter(destPath)) ) { String line; // 按行读取文本 while ((line = br.readLine()) != null) { bw.write(line); bw.newLine(); // 换行,还原原文件格式 } System.out.println("文本文件复制完成!"); } catch (IOException e) { e.printStackTrace(); } } }

三、任意文件复制(字节缓冲流,万能复制)
适合场景:所有类型文件,尤其是非文本文件(图片、视频、压缩包等)。
代码示例

import java.io.*; public class AnyFileCopy { public static void main(String[] args) { String srcPath = "src/original.jpg"; String destPath = "src/copy.jpg"; try ( BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcPath)); BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(destPath)) ) { byte[] buffer = new byte[1024]; // 缓冲数组,一次读1KB int len; while ((len = bis.read(buffer)) != -1) { bos.write(buffer, 0, len); } System.out.println("文件复制完成!"); } catch (IOException e) { e.printStackTrace(); } } }

四、两种方式对比

方式适用文件优点缺点
字符缓冲流纯文本文件读取方便(按行读)、性能高只能处理文本,不能复制图片 / 视频
字节缓冲流所有文件(万能)兼容性强,任何文件都能复制

读取的是字节,处理文本时不如字符流方便

五、关键知识点
1.缓冲流的作用:自带缓冲区,减少磁盘 IO 次数,大幅提升复制效率,比普通 FileInputStream/FileReader 快很多。
2.try-with-resources:自动关闭流,避免手动写 finally 代码,更安全简洁。
r3.eadLine () 和缓冲数组:字符流用 readLine () 按行读文本;字节流用 byte [] 数组批量读数据,减少 IO 次数。
六、一句话总结
复制文本文件:用字符缓冲流,简单高效。
复制任意文件:用字节缓冲流,兼容性强,是 “万能复制器”。

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

相关文章:

  • 6GB显卡本地AI效率提升实战:Ollama服务化+API调用+成本对比
  • Windows 10 Android子系统移植实战指南:架构解析与深度部署方案
  • 创建订单报错‘无定价过程被确定’
  • 人形机器人进真实场景,开发者需要关注哪些技术栈?
  • AI驱动的自动化——金融、物流与医疗行业的转型
  • 前端八股文面经大全:美团前端暑期实习一面(2026-06-08)·面经深度解析
  • 2026年中国氢能产业拐点,氢燃料电池系统有望迎来爆发
  • 计算机毕业设计之基于大数据的用户购物系统
  • 水性机调色浆WM系列技术优势:纳米分散赋能高效调色
  • equals 和 hashCode 方法:使用它们的原因和位置,以及它们的工作原理
  • El-Table 嵌套内容动态必填项校验
  • 小程序开发入门:从零掌握基础代码结构
  • G-Helper终极降压指南:AMD CPU温度直降15℃的完整实战教程
  • cat命令将调试信息指定到对应路径下
  • 华硕笔记本终极性能调校指南:5分钟掌握G-Helper完整配置
  • git diff 生成一部分文件的补丁
  • 逆水寒手游装备系统主要ui界面拆解
  • 单点ORACLE EBS 网页端
  • QT生成文件添加图标
  • c# 便签小程序
  • 马年本命年运势
  • 统信系统重置密码
  • 【软件发布】光明正大的看小说而不被发现的摸鱼软件:伪输入法(FakeType)
  • 【专题02】计算机网络面试题(40题),整理频率高,优质的面试题及答案
  • 编程是你最佳选择
  • PPDS生产计划排产-报工
  • 说这是新出的网剧海报
  • 仿照moba游戏账号主页的HTML代码。它采用移动端优先设计,模拟了游戏内个人主页的视觉风格,并展示了玩家信息、常用英雄和近期战绩等核心数据
  • 异地收单不用愁,H5 支付链接一键收款。
  • 计算机毕业设计之智能仓库管理系统开发与设计