複製一個目錄下的所有檔案到另外一個目錄(Java實現)__Java

來源:互聯網
上載者:User
首先說說我的思路, 要複製一個目錄下的所有檔案到另外的一個目錄下,我們不知道目錄下的結構是怎麼樣的,也不知道目錄有多少層,檔案有多少個,這樣我們會想用迴圈,for! 但是我們不知道有多少層,所以迴圈不能夠滿足我們的需求。 學過遞迴的人,都知道這個用遞迴的思想可以很好解決這個問題的。

       遞迴這裡我就不說是什麼東西了,這個自己可以百度,Google。

      

     現在說說我的實現, 因為目錄下有可能存在目錄或者檔案,他們混在一起,所以我們很難進行操作和判斷,如果直接操作的話,我們要先建立目錄,才能定位檔案。這個操作起來比較複製。 所以我想到的是,先複製目錄的結構,再複製檔案這個思路。下面是My Code實現, 

       1.先寫一個檔案複製的操作方法

       2.複製目錄結構的複製方法

      3. 遞迴源目標檔案的方法

      4. 整合 [java] view plain copy print ? import java.io.File;   import java.io.FileInputStream;   import java.io.FileNotFoundException;   import java.io.FileOutputStream;   import java.io.IOException;   import java.io.InputStream;   import java.io.OutputStream;         public class CopyDirectory {       public static void main(String[] args) {           //複製D盤下的bbs目錄到  D盤下的bb2/mms1下           CopyDirectory.copyFileOrDir("D://bbs", "D://bbs2//mms1");       }               /**       * @Description: 整合兩個操作,一個是檔案夾的所有目錄,然後複製目錄下的所有檔案到相應的目錄       * @param srcPath   需要複製的目錄       * @param targetPath  複製到哪裡       * @author L.Eric       * create: 2013-4-16       */       public static void copyFileOrDir(String srcPath, String targetPath){           parseDir(srcPath,targetPath);           copyAllFile(srcPath, targetPath);       }              public static void copyAllFile(String srcPath, String targetPath){           File f = new File(srcPath);           File[] fileList = f.listFiles();           for(File f1 : fileList){               if(f1.isFile()) {                   CopyDirectory.copyFile(srcPath + "//" + f1.getName(), targetPath + "//" + f1.getName());               }               //判斷是否是目錄               if(f1.isDirectory()) {                   copyAllFile(f1.getPath().toString(), targetPath + "//" + f1.getName());               }           }       }               /**           * @Description: 通過位元組流複製一個檔案           * @param src      源檔案的路徑           * @param target   目標檔案的路徑           * @author L.Eric           * create: 2013-4-16      */       public static void copyFile(String src, String target){               InputStream is = null;               OutputStream os = null;                              try {                   is = new FileInputStream(src);                   os = new FileOutputStream(target);                   byte[] buff = new byte[1024];                   int len = 0;                   while((len = is.read(buff, 0, buff.length)) != -1) {                       os.write(buff, 0, len);                   }                   System.out.println("檔案拷貝成功。");               } catch (FileNotFoundException e) {                   // TODO Auto-generated catch block                   e.printStackTrace();               } catch (IOException e) {                   // TODO Auto-generated catch block                   e.printStackTrace();               } finally {                   if(os!=null){                       try {                           os.close();                       } catch (IOException e) {                           // TODO Auto-generated catch block                           e.printStackTrace();                       } finally {                           if(is!=null){                               try {                                   is.close();                               } catch (IOException e) {                                   // TODO Auto-generated catch block                                   e.printStackTrace();                               }                           }                       }                   }               }                          }               /**       * @Description: 複製一個目錄下的所有目錄檔案(只複製目錄結構)       * @param pathName   需要複製的目標目錄       * @param target     產生的目標檔案目錄       * @author L.Eric       * create: 2013-4-16       */       public static void parseDir(String pathName, String target){           //建立一個新的目錄           File targetFile = new File(target);           if(!targetFile.exists()) {               targetFile.mkdirs();           }                      //建立一個抽象路徑           File file = new File(pathName);           if(file.isDirectory()){               File[] files = file.listFiles();               for(File f : files){                   if(f.isDirectory()) {                       parseDir(f.getPath(), target + "//" + f.getName());                   }               }           }       }          } 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.