我在下面写了这个函数,找到所有名为' Construction Documents'的文件夹, 我希望它将所有内容复制到另一个目录。
private void findDirectory(File parentDirectory, String insertDir) {
if(foundFolder) {
return;
}
File[] files = parentDirectory.listFiles();
for (File file : files) {
if (file.isFile()) {
continue;
}
if (file.getName().equals("Construction Documents")) {
System.out.println(file.getAbsolutePath());
if(file.getParent().contains("Original") || file.getParent().contains("Revision") || file.getParent().contains("R0")){
new File(insertDir + file.getParent()).mkdir();
try {
// FileUtils.copyDirectory(new File(file), new File(insertDir + file.getParent().toString()));
Files.copy(file.toPath(), new File(insertDir + file.getParent().toString()).toPath());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
if(file.isDirectory()) {
findDirectory(file, insertDir);
}
}
}
insertDir是文件路径id的字符串,就像插入文件夹一样。我尝试使用FileUtils,但这会复制整个ENTIRE目录,包括实际构造文档文件夹之前的许多父文件。原生java也没有工作,只是导致错误。
简而言之,我想将一个文件夹及其所有子文件夹和内容复制到另一个文件夹,但不会在目标端创建复制文件中的所有父文件。
答案 0 :(得分:1)
沿着这些方向:
Path srcDir = Paths.get("c:\\src");
Path dstDir = Paths.get("c:\\dst");
Files.walkFileTree(srcDir, new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) throws IOException {
Path dstSubDir = dstDir.resolve(srcDir.relativize(dir));
Files.createDirectories(dstSubDir);
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
Path dstFile = dstDir.resolve(srcDir.relativize(file));
Files.copy(file, dstFile);
return FileVisitResult.CONTINUE;
}
});