class Copy{
public static void main(String[] args){
//需要复制的文件夹 源地址
File srcFile=new File("D:\\测试")
//复制到的地方 目的地
File destFile=new File("E:\\")
//文件夹复制的方法
copyFileAll(srcFile,destFile);
}
}
- copyFileAll方法
public void copyFileAll(File srcFile,File destFile){
//判断递归是否继续执行 判断file是否是一个文件,是文件则对文件继续复制
//然后结束本次递归。
if(srcFile.isFile){
//创建输入流
FileInputStream fis=new FileInputStream(srcFile.getAbsolutePath());
//创建输出流
String s=( destFile.getAbsolutePath().endsWith("\\")?destFile.getAbsolutePath() :destFile.getAbsolutePath() +"\\")+srcFile.getAbsolutePath().substring(3);
FileOutputStream fos=new FileOutputStream(s);
//读文件
byte b[1024];
int i=0;
//写文件
while((i=fis.read(b))!=-1){
//写入文件
fos.write(0,i);
}
//结束递归
return;
}
//获取源目录的所有 文件和目录
File[] files=srcFile.listFiles();
//用增强for 遍历数组即文件
for(File file:files){
//获取源地址路径
String src=file.getAbsolutePath();
//目的地址
String dest=destFile.getAbsolutePatha().endsWith("\\")?destFile.getAbsolutePatha() : destFile.getAbsolutePatha()+"\\" )+src.substring(3);
//创建 目的地址文件对象
File destFile2=new File(dest);
//判断是否为文件夹,没有文件夹创建文件夹
if(!destFile2.isDirectory()){
//创建文件夹方法
destFille2.mkdir();
}
//递归调用方法。
//遍历文件时有可能这个文件是一个文件夹或者是一个文件
//当时一个文件夹时我们进行递归调用,是文件则直接复制
//递归的过程不断打开一个文件夹然后再打开文件夹直到没有文件夹递归才结束
copyFileAll(file,destFile);
}
}
总结
文件夹的复制过程中,文件夹下的有可能是文件或文件夹;需要利用递归继续遍历文件夹直到遍历的最后是文件夹结束遍历;文件夹创建使用File里mkdir()方法进行创建。文件复制利用FileInputStream 和FileOutputStream进行读写入操作。