2016-11-09 综合实战:文件拷贝
前言:模拟DOS系统的文件拷贝程序,实现字节流的综合使用。
一、简介
在DOS系统中文件拷贝的命令:copy 源文件路径 目标文件路径
实现的方法:
|-将所有文件内容一次性读取到程序之中,而后一次性的输出:需要开辟一个跟文件大小一样的数组,但是如果文件过大,会造成程序崩溃;
|-采用边读边输出的方法,就不会占用太多的内存空间。
这里通过Eclise给设置两个初始化的参数:H:\my.jpg H:Hello.jpg;
范例代码:
package cn.mldn.demo22; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; public class CopyDemo { public static void main(String[] args) throws Exception{ long start = System.currentTimeMillis(); if(args.length != 2){ System.out.println("命令执行错误!"); System.exit(1);//程序执行退出操作 } //如果输入的擦拿书正确了,那么应该执行文件的验证 File inFile = new File(args[0]); if(!inFile.exists()){//源文件是不存在 System.out.println("源文件不存在,请重新确认文件路径"); System.exit(1); } //如果源文件是存在的,那么就执行文件输出操作,同时考虑文件目录 File outFile = new File(args[1]); if(!outFile.getParentFile().exists()){ //输出路径不存在 outFile.getParentFile().mkdirs(); } //实现文件内容的拷贝 InputStream input = new FileInputStream(inFile); OutputStream output = new FileOutputStream(outFile); //实现文件拷贝 int temp = 0;//保存每次读取的内容 while((temp = input.read())!=-1){ output.write(temp);//输出单个字节 } input.close(); output.close(); long end = System.currentTimeMillis(); System.out.println("文件拷贝所花费的时间:"+(end-start)/1000+"s"); } }
运行结果:
这里可以发现这样一个问题,在实际的运行过程中确实可以实现文件的拷贝操作,但是使用的时间实在是太长了。可以采用下面的改进方法;
范例代码★:(以后会经常看见,使用!)
package cn.mldn.demo22; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; public class CopyDemo { public static void main(String[] args) throws Exception{ // TODO Auto-generated method stub long start = System.currentTimeMillis(); if(args.length != 2){ System.out.println("命令执行错误!"); System.exit(1);//程序执行退出操作 } //如果输入的擦拿书正确了,那么应该执行文件的验证 File inFile = new File(args[0]); if(!inFile.exists()){//源文件是不存在 System.out.println("源文件不存在,请重新确认文件路径"); System.exit(1); } //如果源文件是存在的,那么就执行文件输出操作,同时考虑文件目录 File outFile = new File(args[1]); if(!outFile.getParentFile().exists()){ //输出路径不存在 outFile.getParentFile().mkdirs(); } //实现文件内容的拷贝 InputStream input = new FileInputStream(inFile); OutputStream output = new FileOutputStream(outFile); //实现文件拷贝 int temp = 0;//保存每次读取的内容 byte data[] = new byte[1024]; while((temp = input.read(data))!=-1){ output.write(data,0,temp);//输出数组 } input.close(); output.close(); long end = System.currentTimeMillis(); System.out.println("文件拷贝所花费的时间:"+(end-start)+"ms"); } }
运行结果:
注意这里使用的单位是跟上面的代码不同的,速度明显提升了很多。


浙公网安备 33010602011771号