文件拷贝
在操作系统里面有一个copy命令,这个命令的主要功能是可以实现文件的拷贝处理,现在要求模拟这个命令,通过初始化参数输入拷贝的源文件路径与拷贝的目标路径实现文件的拷贝处理。
需求分析:
‒ 需要实现文件的拷贝操作,那么这种拷贝就有可能拷贝各种类型的文件,所以肯定使用字节流
‒ 在进行拷贝的时候有可能需要考虑到大文件的拷贝问题
实现方案:
‒ 方案一:使用InputSream将全部要拷贝的内容直接读取到程序里面,而后一次性的输出到目标文件
‒ 如果现在拷贝的文件很大,基本上程序就死了
‒ 方案二:采用部分拷贝,读取一部分输出一部分,如果现在要采用第二种做法,核心的操作方法
‒ InputSream:public int read(byte[] b)throws IOException
‒ OutputStream:public void write(byte[] b,int off,int len)throws IOException
package 字节流和字符流;
import java.io.*;
public class FileTest02 {
public static void main(String[] args) throws Exception {
File file = new File("."+File.separator+"字节流和字符流"+File.separator+"成都数据.txt");
File file2 = new File("."+File.separator+"字节流和字符流"+File.separator+"成都数据2.txt");
long start = System.currentTimeMillis();
FileUtil03 fileUtil03 = new FileUtil03(file,file2);
System.out.println(fileUtil03.copy()?"文件拷贝成功":"文件拷贝失败");
long end = System.currentTimeMillis();
System.out.println("拷贝完成时间:"+(end-start));
}
}
class FileUtil03{
private File srcfile;
private File desFile;
public FileUtil03(String src,String des){
this(new File(src),new File(des));
}
public FileUtil03(File srcfile,File desFile){
this.srcfile = srcfile;
this.desFile = desFile;
}
public boolean copy()throws Exception{
if (!this.srcfile.exists()) {
System.out.println("拷贝的源文件不存在");
return false;
}if (!desFile.getParentFile().exists()){
this.desFile.getParentFile().mkdirs();
}
byte[] bytes =new byte[1024];
InputStream inputStream = null;
OutputStream outputStream =null;
try {
inputStream = new FileInputStream(this.srcfile);
outputStream = new FileOutputStream(this.desFile);
int len =0;
while ((len =inputStream.read(bytes))!=-1){
outputStream.write(bytes,0,len);
}
return true;
}catch (Exception e){
throw e;
}finally {
if (inputStream != null){
inputStream.close();
}
if (outputStream!=null){
outputStream.close();
}
}
}