天天看點

Java中用位元組流複制多級檔案夾

需求:複制多級檔案夾

資料源: D:/Java/data
目的地: D:/Java/user
分析 
      A:封裝資料源 (資料源是你知道路徑和名字的檔案)
      B:封裝目的地 (是你最終複制過去的檔案夾的父路徑)
      C: 建立一個方法用于複制檔案夾
      D:在C方法中判斷該File是檔案還是檔案夾 
          a:是檔案夾 
                  就在目的地下建立該檔案夾 
                  擷取該File對象的所有檔案或者檔案夾對象 
                  周遊得到每一個File對象 
                  使用遞歸(再次調用D方法)
          b:是檔案 
               複制檔案(前提是有一個和源檔案一樣的檔案名,或者不存在的路徑,位元組流複制的時候沒有檔案會建立一個)
           
public class Copy {
    public static void main(String[] args) {
        File srcFile = new File("D:/Java/data");//源檔案對象。明确路徑的檔案
        File descFile = new File("D:/Java/user");//将源檔案複制到這個目錄下,複制過來會在此目錄下有一個和源檔案名一樣的檔案

        copyFolder(srcFile,descFile);
    }

//複制檔案的方法
    private static void copyFolder(File srcFile, File descFile) {
        String srcName = srcFile.getName();//擷取源檔案名
        if (srcFile.isDirectory()){//是檔案夾進入次目錄
            File file = new File(descFile,srcName);//通過構造方法(父類的路徑,檔案名對象)建立目錄對象
            file.mkdir();//建立目錄
            File[] files = file.listFiles();
            for (File f : files){
                copyFolder(f,file);//周遊得到file目錄下所有的對象,然後判斷是檔案夾,還是檔案,是以自己調用自己的方法(遞歸)
            }
        }else {//是檔案,直接複制
            File file = new File(descFile,srcName);//封裝一個和源檔案名一樣的對象,使用流建立時會自動建立該檔案
           copyFile(srcFile,file);
        }
    }

//使用流複制檔案
    private static void copyFile(File srcFile, File file) {
        FileInputStream fis = null;
        FileOutputStream fos = null;
        try {
            fis = new FileInputStream(srcFile);
            fos = new FileOutputStream(file);

            byte[] bytes = new byte[1024];
            int len;
            while ((len = fis.read(bytes)) != -1) {
                fos.write(bytes,0,len);
            }

        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            try {
                fos.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                fis.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}