为什么不能复制文件夹而只能复制文件

时间:2015-03-15 18:32:52

标签: java arraylist

我有一个获取源地址,目标地址和ArrayList的方法,然后它通过giver Source文件夹并使用ArrayList项检查每个文件,如果它们具有相同的名称,则复制具有完全相同的文件夹结构的目的地(因此它使所需的文件夹)。一切都在这里工作。但是如果ArrayList的项目是文件夹名称,则会出错。一些它如何找不到该文件夹​​,并出现错误。

这是我的代码:

public class Syncer {

    public static void main(String[] args) {
        File source = new File("D:\\Documents\\A X");
        File destination = new File("D:\\Documents\\A X Sample");
        ArrayList<String> list = new ArrayList<String>();
        list.add("third");

        folderCrawler(source, destination, list);
    }

    public static void folderCrawler(File src, File dest, ArrayList<String> filesToCopy){
        if(src.isDirectory()){
            String[] children = src.list();
            for(String file:children){

                if(filesToCopy.contains(file)){
                    File from = new File(src, file);
                    File to = new File(dest, file);
                    dest.mkdirs();

                    try{
                        copy(from, to);
                    }catch(IOException e){
                        e.printStackTrace();
                        System.exit(0);
                    }
                }
                else{System.out.println("Not Found");}
            }

            for (int i=0; i<children.length; i++){
                folderCrawler(new File(src, children[i]), new File(dest, children[i]), filesToCopy);
            }
        }
    }
    public static void copy(File src, File dest) throws IOException{
        InputStream in = new FileInputStream(src);
        OutputStream out = new FileOutputStream(dest);


        byte[] buf = new byte[1024];
        int len;
        while ((len = in.read(buf)) > 0) {
            out.write(buf, 0, len);
        }
        System.out.println("Copied: " + src.getName());
        in.close();
        out.close();
    }
}

它会编译并向下列表,直到找到与当前源相同的数组项,然后停止。 错误:

java.io.FileNotFoundException: D:\Documents\A X\folder2\tohi\third (Access is denied)
    at java.io.FileInputStream.open(Native Method)
    at java.io.FileInputStream.<init>(FileInputStream.java:138)
    at syncer.Syncer.copy(Syncer.java:61)
    at syncer.Syncer.folderCrawler(Syncer.java:45)
    at syncer.Syncer.folderCrawler(Syncer.java:55)
    at syncer.Syncer.folderCrawler(Syncer.java:55)
    at syncer.Syncer.main(Syncer.java:31)

在我的其他数学中,我得到相同的错误,但它是(Is a directory)而不是(Access denied)

所以即使给出了一个文件夹,任何想法都可以使它工作。那么它会复制文件夹及其内部文件?

1 个答案:

答案 0 :(得分:1)

抱歉,我没有足够的代表发表评论。

看看apache commons FileUtils。它们具有许多复制功能,因此您无需自己实现它们。