天天看點

IO流 綜合應用-檔案夾複制思路

思路

考慮到檔案夾檔案内容多樣性,選擇位元組流,同時要求效率,是以選擇緩沖位元組流;檔案夾複制的本質還是每個檔案的複制,當周遊檔案夾時遇到檔案夾檔案時,需要遞歸深入周遊檔案夾,直至到達檔案的複制;是以我們需要一個檔案複制方法,和一個遞歸周遊檔案夾的方法。

執行個體

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();
    }
}