java byte 复制_java使用字节流和字符流实现文件复制

大家在Java开发中都会遇到文件复制的文件,众所周知,需要通过文件输入输出流实现。

那究竟该怎么做那,话不多说,直接上代码:

一,使用字节流复制文件

public class FileByteCopy {

public static void main(String[] args) {

FileByteCopy f= new FileByteCopy();

try {

f.copy("d:/File/1.txt","d:/CopyFile/1.txt");

} catch (Exception e) {

e.printStackTrace();

}

}

public void copy(String f1,String f2) throws Exception{

FileInputStream fis = new FileInputStream(f1); //首先构建输入流的对象,指定需要读取的文件路径

FileOutputStream fos = new FileOutputStream(f2,false); //构建文件输出流的对象,即将文件复制在哪里去,后面的true代表每次写入时不清空当前文件内容

//方法一,单字节复制

// int value = fis.read(); / //一个字节一个字节的读取文件的内容

// while(value!=-1){

// fos.write(value);

// fos.flush();

// value = fis.read();

// }

//方法二  以字节数组为单位传递 (一次传递一个大小自定义的数组)

byte [] bytes = new byte[1024];

int len=fis.read(bytes); //把读取的字节存入到字节数组中  此时的len为文件中的大小,注意不一定是1024。下图中的95字节即为对应的源文件的len值

7b16ba01cc086a37363f62675643f5f8.png

while(len!=-1){

// fos.write(bytes); //使用这种方法,如果源文件大小不是1024,,复制后的文件也会是1024。因为一次读取的最小的都是1024,详细见下图。

68f724bad5a33d9a9f6bd2ca7369ecb7.png

复制前

a3bc8420195291240acec6e77d72ecab.png

复制后

2a2e1cc5c6d2f34d21ec42eb2169abd4.png

fos.write(bytes, 0, len); //从偏移量0开始到len(95)写入字符,可以保证源文件和复制后的文件大小一致。

fos.flush();

len=fis.read(bytes);

}

//读取完毕后关闭流

fis.close();

fos.close();

}

}

二,使用字符流复制文件(与字节流同理)

public class FileCharCopy {

public static void main(String[] args) {

FileCharCopy f = new FileCharCopy();

try {

f.copy("d:/File/1.txt","d:/CopyFile/1.txt");

} catch (Exception e) {

e.printStackTrace();

}

}

public void copy(String f1,String f2) throws Exception{

FileReader fr = new FileReader(f1);

FileWriter fw =new FileWriter(f2,false);

//int value=fr.read();

//while(value!=-1){

//fw.write(value);

//fw.flush();

//value=fr.read();

//}

char [] chars = new char[1024];

int len =fr.read(chars);

while(len!=-1){

fw.write(chars, 0, len);

fw.flush();

len =fr.read(chars);

}

fr.close();

fw.close();

}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值