JAVA递归调用 复制文件夹及子文件夹及文件夹下的文件

来源:互联网 发布:c语言string类型 编辑:程序博客网 时间:2024/04/30 22:21
import java.io.*;
  import java.util.*;
  /**
  *复制文件
  *by lecky.lee
  *2006-06-08
  */
  
  public class CopyFile
  {
   String intiPathOut;
   //初始输出路径
   int cnt=0;
   //计数器,用于判定是否首次调用copyFiles方法
   public void copyFiles(String pathIn,String pathOut) throws IOException
   {
   File f= new File(pathIn);
   if(!f.exists()){
   System.out.println ("源文件路径不存在");
   System.exit(5);
   }
   if(cnt==0){
   File out = new File(this.intiPathOut);
   out.mkdir();
   //首次调用执行,创建初始输出目录
   }
   if(f.isFile()){
   this.copyFile(f,pathOut);
   }
   else{
   this.copyDir(f,pathOut);
   } 
   
   cnt++;
   
   }
   
   public void copyDir(File f,String pathOut) throws IOException{
   System.out.println(f.getPath());
   
   
   pathOut=this.intiPathOut+f.getPath().substring(2);
   //修改输出路径字符串,将子文件夹相对路径追加至初始输出路径
   //substring用于去掉路径中的驱动器盘符
   File dir = new File(pathOut);
   dir.mkdir(); 
  
   
   File temp[]=f.listFiles();
   for(int i=0;i   this.copyFiles(temp[i].toString(),pathOut);
   //递归调用此方法
   }
   
   }
   
   public void copyFile(File f,String pathOut) throws IOException{
   System.out.println(f.getPath());
   
   DataInputStream in = new DataInputStream(
   new BufferedInputStream(
   new FileInputStream(f.getPath())));
   
   
   byte[] date = new byte[in.available()];
   
   in.read(date);
   
   DataOutputStream out = new DataOutputStream(
   new BufferedOutputStream(
   new FileOutputStream(pathOut+"/"+f.getName())));
   
   
   out.write(date);
   
   in.close();
   out.close(); 
   
   }
   public static void main(String[] args) throws IOException
   {
   CopyFile cp = new CopyFile();
   cp.intiPathOut="D:/11111111";
   cp.copyFiles("D:/lecky","D:/11111111");
   System.out.println ("复制完毕"); 
   }
   
  } 
0 0