我有一个获取源地址,目标地址和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)
。
所以即使给出了一个文件夹,任何想法都可以使它工作。那么它会复制文件夹及其内部文件?