复制多级文件夹
/**
* 复制多级文件夹:
* 需求:复制多级文件夹
*
* 数据源:E:\code\demos\(随便选一个你的e盘下的某个文件夹,里面需要包括多个子文件夹及子文件)
* 目的地:E:\\ (将该多级文件夹整个复制到e盘根目录)
*
* 提示:
* 复制多级文件夹的流程:
* A:封装数据源File
* B:封装目的地File
* C:判断该File是文件夹还是文件
* a:是文件夹
* 就在目的地目录下创建该文件夹
* 获取该File对象下的所有文件或者文件夹File对象
* 遍历得到每一个File对象
* 回到C(递归调用)
* b:是文件
* 就复制(字节流) 可以写一个函数来完成复制功能
* @author 张致远
*
*/
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.Writer;
public class Homework2 {
//复制文件的 函数
public static void Cop1(File file1,File file2){
// file2=new File("E:\\");
Reader reader=null;
Writer writer =null;
try {
FileInputStream fis1=new FileInputStream(file1);
FileOutputStream fos1=new FileOutputStream(file2);
reader=new InputStreamReader(fis1,"GBK");
writer=new OutputStreamWriter(fos1,"GBK");
char[] bb=new char[1024];
int read;
while((read=reader.read(bb, 0, 1024))!=-1){
writer.write(bb, 0, read);
}
reader.close();
writer.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//recursive递归函数
public static void recursive(File file1,File file2){
// File file2=new File("E:\\");
if(file1.exists()&&file1.isDirectory()){
if(file1==null) return;
File[] filelist=file1.listFiles();
if(filelist==null) return;
for(File fi :filelist){
if(fi.isDirectory()){
File newfile=new File(file2,fi.getName());
System.out.println("创建文件夹!" );
newfile.mkdirs();
recursive(fi,newfile);
}else{
File newfile=new File(file2,fi.getName());
System.out.println("复制文件!" );
Cop1(fi,newfile);
}
}//for循环结束
}//判断文件存在和文件夹结束
}//递归函数结束
//主函数
public static void main(String[] args) {
// TODO Auto-generated method stub
File file1=new File("E:\\wdpx\\2017.1.21\\zuoye");
File file2=new File("E:\\");
recursive(file1,file2);
}
}