Java的IO流實現文件和文件夾的復制

本文實例為大傢分享瞭Java的IO流實現文件和文件夾復制的具體代碼,供大傢參考,具體內容如下

1、使用文件流對單個文件進行復制

將某個文件復制到指定的路徑下:

//復制文件
public static void copy(File f1, String path) throws IOException {
        System.out.println("***copy***" + f1.getName());
        FileInputStream in = new FileInputStream(f1);
        FileOutputStream out = new FileOutputStream(path + f1.getName());
        byte[] bytes = new byte[512];
        while ((in.read(bytes)) != -1) {
            out.write(bytes, 0, bytes.length);
        }
        out.close();
        in.close();
    }

2、使用文件流將文件及文件夾下的文件進行復制

將a文件夾下的文件拷貝到b文件夾裡。a和b文件夾可能存在相同文件,若b文件夾下已經存在a文件夾中的文件則不拷貝,若不存在則拷貝。

(1)遞歸復制文件夾下的文件

public static void copyAll(File A, File B) throws IOException {
        boolean flag = true;
        if (!B.exists()) {
            B.mkdir();
        }
        String[] a=A.list();
        //遍歷A中所有文件及文件夾
        for (int i = 0; i < a.length; i++) {
            System.out.println("a:"+a[i]);
            //若A中含有文件夾
            if (new File(A.getPath()+"/"+a[i]).isDirectory()) {
                File newFolder=null;
                if (! ( new File(B.getPath()+"/"+a[i]).exists() )) {
                    newFolder = new File(B, a[i]);
                    newFolder.mkdir(); //創建子文件夾
                }
                //遞歸,判斷
                copyAll(new File(A.getPath()+"/"+a[i]), newFolder);
            }
            //若A中含有文件,直接復制文件
            else {
                copyOtherFile(new File(A.getPath()+"/"+a[i]), B);
            }            
        }
        
    }

(2)若含有同名文件,則不進行復制

public static void copyOtherFile(File srcfile, File destfile) throws IOException {
        File[] destlist = destfile.listFiles();
        boolean flag = true;
            flag = true;
            for (File f2 : destlist) {
                System.out.println("f:" + srcfile.getName());
                System.out.println("f2:" + f2.getName());
                //含有同名文件,不進行復制
                if (srcfile.getName().equals(f2.getName())) {
                    System.out.println("相同");
                    flag = false;
                    break;
                } else {
                    System.out.println("不相同");
                }
            }
            if (flag) {
                copy(srcfile, destfile.getPath() + "/");
            }
        
    }

(3)主函數調用

public static void main(String[] args) throws IOException {
        File file = new File("F:/a");
        File file2 = new File("F:/b");
        copyAll(file, file2);
        System.out.println("復制成功!!!");
    }

下一篇:Java實現文件及文件夾的刪除

以上就是本文的全部內容,希望對大傢的學習有所幫助,也希望大傢多多支持WalkonNet。

推薦閱讀: