package com.File;
import java.io.*;
/**
* Created by Administrator on 2017\8\8 0008.
* 实现文件拷贝:用带缓冲区的字节流来实现
* 写入目标文件不需要判断是否存在,如果不存在,则自动创建
*/
public class CopyFile {
public static void copyFile(File srcFile,File dstFile)throws IOException{
if(!srcFile.exists()){
//抛出异常
throw new IllegalArgumentException("文件:"+srcFile+"不存");
}
if(!srcFile.isFile()){
//抛出异常
throw new IllegalArgumentException("不是文件");
}
BufferedInputStream bis= new BufferedInputStream(new FileInputStream(srcFile));//默认缓冲区大小
//BufferedInputStream bis= new BufferedInputStream(new FileInputStream(srcFile),20);指定缓冲区大小
BufferedOutputStream ois=new BufferedOutputStream(new FileOutputStream(dstFile));
// BufferedOutputStream ois2=new BufferedOutputStream(new FileOutputStream(dstFile),20);
int c;
while((c=bis.read())!=-1){
ois.write(c);
ois.flush();//这块必须要刷新缓冲区,否则数据写不进去
}
//完成操作之后,需要关闭
bis.close();
ois.close();
}
public static void main(String[] args)throws IOException {
CopyFile.copyFile(new File("D:\\U盘\\imooc\\Hello.txt"),new File("D:\\U盘\\imooc\\Hello.txt"));
}
}
因为你的源文件和目标文件名称一样,所以在找目标文件时发现了和目标文件名称一样的源文件,就把源文件删除了重新创建了一个文件,所以你的源文件就没有了,老师视频里面有讲到,当你给出一个路径时,如果没有这个文件他会创建这个文件,如果存在这个文件他会把这个文件删除再创建,如果你不想这个已经存在的文件被删除,只是想要续写他,需要再加一个true,如果我没记错应该是:new File("文件路径",true),具体的你可以再听一遍
我试了一下可以实现啊,
CopyFile.copyFile(new File("E:"+File.separator+"io.txt"),new File("E:"+File.separator+"hello.txt"));//这样可以兼容不同的系统,不建议你那种写法。
CopyFile.copyFile(new File("D:\\U盘\\imooc\\Hello.txt"),new File("D:\\U盘\\imooc\\Hello.txt"));
第一个File是源文件,第二个File是copy之后生成的文件,在文件下面开始是没有的。
至于为什么同一个文件copy时内容被删就不知道了。