我一直在尝试以递归方式将目录从NFS挂载复制到Java中的本地文件系统。我首先尝试在Apache Utils中使用FileUtils。可悲的是,它没有递归复制(遍历子目录等),所以我不得不回到绘图板。我听说,当它们是跨设备时,其中一些操作是“挑剔的”。然后我建议尝试使用linux命令,所以我尝试这样做:
Process process = new ProcessBuilder()
.command("cp -R " + source.getAbsolutePath() + " " + dest.getAbsolutePath())
.start();
process.waitFor();
遗憾地回答“没有这样的文件或目录”,我在那里打了一些调试并再次尝试。即使我得到“没有这样的文件或目录”,我的调试表明源目录和目标目录都存在,以及手动检查它们是否存在。
答案 0 :(得分:0)
好吧,所以我决定编写自己的实现,奇怪的是它有效。可悲的是,我几乎不知道为什么这对FileUtils起作用。这是我写的:
private void copy(File source, File destination) throws IOException {
if (source.isDirectory()) {
if (!destination.exists()) {
destination.mkdir();
}
if (destination.isFile()) {
destination.delete();
destination.mkdir();
}
for (File src : source.listFiles()) {
File dest = new File(destination, src.getName());
copy(src, dest);
}
} else {
destination.createNewFile();
FileInputStream input = new FileInputStream(source);
FileOutputStream out = new FileOutputStream(destination);
byte[] buffer = new byte[2048];
int l;
while ((l = input.read(buffer)) > 0) {
out.write(buffer, 0, l);
}
input.close();
out.close();
}
}