java 文件夹复制到另一个文件夹中

首先说说我的思路, 要复制一个目录下的所有文件到另外的一个目录下,我们不知道目录下的结构是怎么样的,也不知道目录有多少层,文件有多少个,这样我们会想用循环,for! 但是我们不知道有多少层,所以循环不能够满足我们的需求! 学过递归的人,都知道这个用递归的思想可以很好解决这个问题的。

       递归这里我就不说是什么东西了,这个自己可以百度,谷歌!

      

     现在说说我的实现, 因为目录下有可能存在目录或者文件,他们混在一起,所以我们很难进行操作和判断,如果直接操作的话,我们要先建立目录,才能定位文件。这个操作起来比较复制。 所以我想到的是,先复制目录的结构,再复制文件这个思路!下面是我的代码实现, 

       1.先写一个文件复制的操作方法

       2.复制目录结构的复制方法

      3. 递归源目标文件的方法

      4. 整合

[java]  view plain copy
  1. import java.io.File;  
  2. import java.io.FileInputStream;  
  3. import java.io.FileNotFoundException;  
  4. import java.io.FileOutputStream;  
  5. import java.io.IOException;  
  6. import java.io.InputStream;  
  7. import java.io.OutputStream;  
  8.   
  9.   
  10. public class CopyDirectory {  
  11.     public static void main(String[] args) {  
  12.         //复制D盘下的bbs目录到  D盘下的bb2/mms1下  
  13.         CopyDirectory.copyFileOrDir("D://bbs""D://bbs2//mms1");  
  14.     }  
  15.       
  16.      /** 
  17.      * @Description: 整合两个操作,一个是文件夹的所有目录,然后复制目录下的所有文件到相应的目录 
  18.      * @param srcPath   需要复制的目录 
  19.      * @param targetPath  复制到哪里 
  20.      * @author L.Eric 
  21.      * create: 2013-4-16 
  22.      */  
  23.     public static void copyFileOrDir(String srcPath, String targetPath){  
  24.         parseDir(srcPath,targetPath);  
  25.         copyAllFile(srcPath, targetPath);  
  26.     }  
  27.       
  28.     public static void copyAllFile(String srcPath, String targetPath){  
  29.         File f = new File(srcPath);  
  30.         File[] fileList = f.listFiles();  
  31.         for(File f1 : fileList){  
  32.             if(f1.isFile()) {  
  33.                 CopyDirectory.copyFile(srcPath + "//" + f1.getName(), targetPath + "//" + f1.getName());  
  34.             }  
  35.             //判断是否是目录  
  36.             if(f1.isDirectory()) {  
  37.                 copyAllFile(f1.getPath().toString(), targetPath + "//" + f1.getName());  
  38.             }  
  39.         }  
  40.     }  
  41.       
  42.      /** 
  43.          * @Description: 通过字节流复制一个文件 
  44.          * @param src      源文件的路径 
  45.          * @param target   目标文件的路径 
  46.          * @author L.Eric 
  47.          * create: 2013-4-16 
  48.     */  
  49.     public static void copyFile(String src, String target){  
  50.             InputStream is = null;  
  51.             OutputStream os = null;  
  52.               
  53.             try {  
  54.                 is = new FileInputStream(src);  
  55.                 os = new FileOutputStream(target);  
  56.                 byte[] buff = new byte[1024];  
  57.                 int len = 0;  
  58.                 while((len = is.read(buff, 0, buff.length)) != -1) {  
  59.                     os.write(buff, 0, len);  
  60.                 }  
  61.                 System.out.println("文件拷贝成功!");  
  62.             } catch (FileNotFoundException e) {  
  63.                 // TODO Auto-generated catch block  
  64.                 e.printStackTrace();  
  65.             } catch (IOException e) {  
  66.                 // TODO Auto-generated catch block  
  67.                 e.printStackTrace();  
  68.             } finally {  
  69.                 if(os!=null){  
  70.                     try {  
  71.                         os.close();  
  72.                     } catch (IOException e) {  
  73.                         // TODO Auto-generated catch block  
  74.                         e.printStackTrace();  
  75.                     } finally {  
  76.                         if(is!=null){  
  77.                             try {  
  78.                                 is.close();  
  79.                             } catch (IOException e) {  
  80.                                 // TODO Auto-generated catch block  
  81.                                 e.printStackTrace();  
  82.                             }  
  83.                         }  
  84.                     }  
  85.                 }  
  86.             }  
  87.               
  88.         }  
  89.       
  90.      /** 
  91.      * @Description: 复制一个目录下的所有目录文件(只复制目录结构) 
  92.      * @param pathName   需要复制的目标目录 
  93.      * @param target     生成的目标文件目录 
  94.      * @author L.Eric 
  95.      * create: 2013-4-16 
  96.      */  
  97.     public static void parseDir(String pathName, String target){  
  98.         //创建一个新的目录  
  99.         File targetFile = new File(target);  
  100.         if(!targetFile.exists()) {  
  101.             targetFile.mkdirs();  
  102.         }  
  103.           
  104.         //创建一个抽象路径  
  105.         File file = new File(pathName);  
  106.         if(file.isDirectory()){  
  107.             File[] files = file.listFiles();  
  108.             for(File f : files){  
  109.                 if(f.isDirectory()) {  
  110.                     parseDir(f.getPath(), target + "//" + f.getName());  
  111.                 }  
  112.             }  
  113.         }  
  114.     }  
  115.       
  116. }  

猜你喜欢

转载自blog.csdn.net/qq_33238935/article/details/78779211