Java---三种文件拷贝的实现方法
来源:互联网 发布:淘宝商城秋冬服饰团购 编辑:程序博客网 时间:2024/05/24 02:33
Java实现文件的拷贝有很多种方法,觉得晕乎乎的,不知道使用哪种方法好,进过一下午的学习,总结出三种常见的实现文件拷贝的方法,并且做了一个对比,看哪个方法能比较快速的实现文件拷贝。
一、单字节拷贝
/* * 单字节拷贝,不带缓冲区 */ public static void copyByByte(File srcFile,File descFile)throws IOException{ if(!srcFile.exists()){ throw new IllegalArgumentException("文件:"+srcFile+"不存在!"); } if(!srcFile.isFile()){ throw new IllegalArgumentException(srcFile+"不是文件!"); } FileInputStream in =new FileInputStream(srcFile); FileOutputStream out = new FileOutputStream(descFile); int a; while((a=in.read())!=-1){ out.write(a); out.flush(); } in.close(); out.close(); }
二、带缓冲区的字节流
/* * 利用带缓冲的字节流 */ public static void copyByBuffer(File srcFile,File descFile)throws IOException{ if(!srcFile.exists()){ throw new IllegalArgumentException("文件:"+srcFile+"不存在!"); } if(!srcFile.isFile()){ throw new IllegalArgumentException(srcFile+"不是文件!"); } BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile)); BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(descFile)); int a; while((a=bis.read())!= -1){ bos.write(a); bos.flush(); } bis.close(); bos.close(); }
三、批量处理
/* * 批量拷贝 */ public static void copyFile(File srcFile,File descFile)throws IOException{ if(!srcFile.exists()){ throw new IllegalArgumentException("文件:"+srcFile+"不存在!"); } if(!srcFile.isFile()){ throw new IllegalArgumentException(srcFile+"不是文件!"); } FileInputStream in = new FileInputStream(srcFile); FileOutputStream out = new FileOutputStream(descFile); /*从in中批量读取字节,放入到buf这个字节数组中, * 从第0个位置开始放,最多放buf.length个 * 返回的是读到的字节的个数 */ byte[] buf = new byte[8*1024]; int a; while((a=in.read(buf,0,buf.length))!=-1){ out.write(a); out.flush(); } in.close(); out.close(); }
接下来,写一个测试方法,来测试一下三种方法拷贝文件的快慢。测试很简单,复制一首歌,大小为3.80MB。
public static void main(String[] args) { try { long start = System.currentTimeMillis(); CopyByByte.copyByByte(new File("C:\\Users\\LJH\\Desktop\\Twins-星光游乐园.mp3") ,new File("C:\\Users\\LJH\\Desktop\\Twins-星光游乐园(单字节拷贝).mp3")); /* * CopyByByte.copyByBuffer(new File("C:\\Users\\LJH\\Desktop\\Twins-星光游乐园.mp3") ,new File("C:\\Users\\LJH\\Desktop\\Twins-星光游乐园(单字节带缓冲区拷贝)).mp3")); */ /* * CopyByByte.copyFile(new File("C:\\Users\\LJH\\Desktop\\Twins-星光游乐园.mp3") ,new File("C:\\Users\\LJH\\Desktop\\Twins-星光游乐园(批量拷贝)).mp3")); */ System.out.println(); long end = System.currentTimeMillis(); System.out.println(end - start); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }
结果:
1、单字节拷贝时间(毫秒):
2、单字节带缓冲区拷贝时间(毫秒):
3、批量拷贝(毫秒):
从结果来看,单字节不适合用来读取或者拷贝大的数据,因为效率太低了,带缓冲区的单字节虽然快了一些,但还是太慢了点,而批量处理则快了很多很多,也是最常用的读取文件的方法。
注意点:
对文件进行操作,要注意抛出IO异常,防范于未然。
操作完文件(读、写操作),要关闭文件,养成好习惯。
当要使用缓冲区的时候,要注意需要刷新缓冲区(也就是flush()方法)。
0 0
- Java---三种文件拷贝的实现方法
- Delphi中实现文件拷贝的三种方法
- Delphi中实现文件拷贝的三种方法
- Delphi中实现文件拷贝的三种方法
- Delphi中实现文件拷贝的三种方法
- Delphi中实现文件拷贝的三种方法
- Java实现文件拷贝的方法
- 拷贝文件的三种方法
- Java实现文件拷贝的4种方法.
- Java实现文件拷贝的4种方法
- Java实现文件拷贝的4种方法
- Java实现文件拷贝的4种方法
- Java实现文件拷贝的4种方法
- Java实现文件拷贝的4种方法.
- Java实现文件拷贝的4种方法
- Java实现文件拷贝的4种方法
- Java实现文件拷贝的4种方法.
- Java实现文件拷贝的4种方法.
- String是final类,常规情况下其值是不可变的。但是可以通过非常规方法——反射进行修改
- Oracle安装后的默认账号以及一些基本操作
- django URL学习
- KEIL生成bin文件
- 练习20——函数和文件
- Java---三种文件拷贝的实现方法
- 完整的申请邓白氏编码的流程(手把手教你申请邓白氏编码)
- Linux下启动Oracle服务和监听程序
- Caused by: android.content.res.Resources$NotFoundException: String resource ID #0x1
- union 与union all的区别
- 根据两点经纬度计算距离
- 消息队列设计精要
- mybatis中的#{}和${}的区别
- JZOJ 3453【NOIP2013中秋节模拟】连通块