複製指定源位置的多級資料夾下所有檔案到指定目標位置

阿豪聊乾貨發表於2016-05-02

目標:複製指定源位置的所有檔案、資料夾到指定的目標位置

分析:

  1.如果指定源位置是檔案,則直接複製檔案到目標位置。

  2.如果指定源位置是資料夾,則首先在目標資料夾下建立與源位置同名資料夾。

  3.遍歷源位置資料夾下所有的檔案,修改源位置為當前遍歷項的檔案位置,目標位置為剛剛上部建立的資料夾位置。

  4.遞迴呼叫,回到1.

程式設計實現

 1 package cn.hafiz.www;
 2 
 3 import java.io.BufferedInputStream;
 4 import java.io.BufferedOutputStream;
 5 import java.io.File;
 6 import java.io.FileInputStream;
 7 import java.io.FileOutputStream;
 8 import java.io.IOException;
 9 
10 public class CopyFolder {
11     public static void main(String[] args)  throws IOException {
12         File srcFile = new File("G:\\hafiz");
13         File desFile = new File("E:\\");
14         copyFolder(srcFile, desFile);
15     }
16 
17     private static void copyFolder(File srcFile, File desFile) throws IOException  {
18         if(srcFile.isDirectory()) {
19             //是資料夾,首先在目標位置建立同名資料夾,然後遍歷資料夾下的檔案,進行遞迴呼叫copyFolder函式
20             File newFolder = new File(desFile, srcFile.getName());
21             newFolder.mkdir();
22             File[] fileArray = srcFile.listFiles();
23             for(File file : fileArray) {
24                 copyFolder(file, newFolder);
25             }
26         }else{
27             //是檔案,直接copy到目標資料夾
28             File newFile = new File(desFile, srcFile.getName());
29             copyFile(srcFile, newFile);
30         }
31     }
32 
33     private static void copyFile(File srcFile, File newFile) throws IOException {
34         //複製檔案到指定位置
35         BufferedInputStream bis = new BufferedInputStream(new FileInputStream(srcFile));
36         BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(newFile));
37         byte[] b = new byte[1024];
38         Integer len = 0;
39         while((len = bis.read(b)) != -1) {
40             bos.write(b, 0, len);
41         }
42         bis.close();
43         bos.close();
44     }
45 }

至此,多級檔案的複製工作就完成了~

相關文章