目標:複製指定源位置的所有檔案、資料夾到指定的目標位置
分析:
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 }
至此,多級檔案的複製工作就完成了~