天天看點

使用I/O流實作目錄的拷貝使用I/O流實作目錄的拷貝

使用I/O流實作目錄的拷貝

實作方法

1、建立兩個方法,在一個 FileEach(File dir,File copyadd)方法中去遞歸周遊傳入的dir目錄,如果目前為目錄,則在copyadd的基礎上建立此檔案夾。

if (dir.isDirectory()){
            File newfile = new File(copyadd, dir.getName());
            newfile.mkdir();
           

2、再去循環周遊此檔案夾,如果周遊得到的file是檔案那麼就調用dirCopy(String source,File copyadd)去實作檔案的拷貝;若為檔案夾則遞歸

File[] files = dir.listFiles();
            if (files.length>0){
                for(File file:files){
                    if (file.isFile()){
                        dirCopy(file.getAbsolutePath(),new File(newfile,file.getName()));
                    }else{
                        FileEach(file,newfile);
                    }
                }
            }
           

整體代碼

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

/**
 * Author K U N 2021/1/11
 */
public class T2 {

    /**
     * 檔案複制
     * @param source
     * @param copyadd
     * @throws IOException
     */
    public static void dirCopy(String source,File copyadd) throws IOException {
        try(
            FileInputStream fis = new FileInputStream(source);
            FileOutputStream fos = new FileOutputStream(copyadd);
        ){

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

    /**
     * 遞歸周遊目标目錄
     * 若目前為目錄,建立一個新的mul
     * 若目前為檔案,則調用I\O方法
     * @param dir
     * @param copyadd
     * @throws IOException
     */
    public static void FileEach(File dir,File copyadd) throws IOException {
        if (dir.isDirectory()){
            File newfile = new File(copyadd, dir.getName());
            newfile.mkdir();
            File[] files = dir.listFiles();
            if (files.length>0){
                for(File file:files){
                    if (file.isFile()){
                        dirCopy(file.getAbsolutePath(),new File(newfile,file.getName()));
                    }else{
                        FileEach(file,newfile);
                    }
                }
            }
        }
    }

    public static void main(String[] args) throws IOException {
    //建立兩個目錄的執行個體。
        File dir = new File("C:\\MyJava_File");
        File copyadd = new File("C:\\Users\\K U N\\Desktop");
        FileEach(dir,copyadd);
    }
}