java实现文件夹的复制和文件的复制

时间:2022-01-18 21:35:21
//复制到特定目录下
public void copyFiles(File rootFile,File copyFile){
//如果目标目录是一个文件,则抛出不可复制到文件的异常
if(copyFile.isFile()){
throw new RuntimeException("不能将一个文件夹复制到一个文件当中");
}
//因为是复制所以,要保证复制后的文件夹和原文件夹的名字包括里面的子文件夹,子文件名字都保持一致
String rootPath=rootFile.getAbsolutePath().substring(rootFile.getAbsolutePath().lastIndexOf('\\'));
//因此,新文件创建的时候,直接截取原文件的路径获取文件名字整合到目标文件夹的后面形成目标文件的路径
String path=copyFile.getAbsolutePath()+rootPath;
copyFile=new File(path);
//如果复制的当前元素是文件,用流操作进行复制
if(rootFile.isFile()){
try {
FileInputStream fis=new FileInputStream(rootFile);
FileOutputStream fos=new FileOutputStream(copyFile);
byte[] b=new byte[1024];
int code;
code = fis.read(b);
while(code!=-1){
fos.write(b, 0, code);
code=fis.read(b);
}
fos.flush();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else{//如果当前file对象指代的是文件夹,那么直接创建一个空文件夹即可
copyFile.mkdir();
File[] files=rootFile.listFiles();
//如果文件夹下面再有子元素,则递归循环复制
if(files.length!=0){
for(File f:files){
this.copyFiles(f, copyFile);
}

}

}
}

测试用例:

File f1=new File("F:\\测试\\a\\haha.txt");//构建原文件对象
//或者构建文件夹对象,同样可以实现文件夹的复制
File f2=new File("E:\\练习");//目标文件夹
CopyFile cf=new CopyFile();
cf.copyFiles(f1,f2);