思路
考慮到檔案夾檔案内容多樣性,選擇位元組流,同時要求效率,是以選擇緩沖位元組流;檔案夾複制的本質還是每個檔案的複制,當周遊檔案夾時遇到檔案夾檔案時,需要遞歸深入周遊檔案夾,直至到達檔案的複制;是以我們需要一個檔案複制方法,和一個遞歸周遊檔案夾的方法。
執行個體
import java.io.*;
public class Copy {
public static void main(String[] args) throws IOException {
File file1 = new File("D:\\test\\a"); //源目錄
File file2 = new File("D:\\test\\taget"); //目标目錄
copyDir(file1,file2);
}
static void copyDir(File srcFile , File tagetFile) throws IOException { //周遊源目錄
if(!tagetFile.exists()){ //若不存在目标目錄,則建立目标目錄
tagetFile.mkdirs();
}
File[] files = srcFile.listFiles(); //導出目錄中的所有檔案,傳回值為檔案類型數組
for (File f:files) {
if(f.isFile()){ //若為檔案,直接複制,調用檔案複制方法,注意檔案路徑的改變
copyFile(new File(srcFile+"\\"+f.getName()),new File(tagetFile+"\\"+f.getName()));
}else{ //若為目錄,則遞歸深入周遊,注意目錄檔案的改變
copyDir(new File(srcFile+"\\"+f.getName()),new File(tagetFile+"\\"+f.getName()));
}
}
}
static void copyFile(File srcFile,File tagetFile) throws IOException { //檔案複制
FileInputStream fileInputStream = new FileInputStream(srcFile);
FileOutputStream fileOutputStream = new FileOutputStream(tagetFile);
BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream);
BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream);
byte[] bytes = new byte[1024]; //緩沖位元組數組
int read = fileInputStream.read(bytes);
while (read!=-1){ //複制檔案内容
bufferedOutputStream.write(bytes,0,read);
read = fileInputStream.read(bytes);
}
bufferedOutputStream.close(); //關閉流
bufferedInputStream.close();
fileOutputStream.close();
fileInputStream.close();
}
}