无法在Java中从NFS挂载复制目录

时间:2015-03-31 04:41:43

标签: java linux nfs

我一直在尝试以递归方式将目录从NFS挂载复制到Java中的本地文件系统。我首先尝试在Apache Utils中使用FileUtils。可悲的是,它没有递归复制(遍历子目录等),所以我不得不回到绘图板。我听说,当它们是跨设备时,其中一些操作是“挑剔的”。然后我建议尝试使用linux命令,所以我尝试这样做:

Process process = new ProcessBuilder()
                    .command("cp -R " + source.getAbsolutePath() + " " + dest.getAbsolutePath())
                    .start();

process.waitFor();

遗憾地回答“没有这样的文件或目录”,我在那里打了一些调试并再次尝试。即使我得到“没有这样的文件或目录”,我的调试表明源目录和目标目录都存在,以及手动检查它们是否存在。

1 个答案:

答案 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();
    }
}