文件复制后目录大小不匹配

时间:2011-06-06 13:58:46

标签: java apache nio apache-commons

希望有人以前见过这个。我正在尝试将所有目录内容从源复制到另一个目录,为此我开始使用Commons FileUtils.copyDirectorytoDirectory方法(File src,File dest)。代码非常简单:

public static void copyDirtoDir(String src, String dest) {
    File s = new File(src);
    File d = new File(dest);
    try {
        FileUtils.copyDirectoryToDirectory(s, d);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

要在Linux上运行此测试,我将应用程序作为JAR运行,并从命令行传递src和dest字符串。问题是,当我在执行后检查生成的目录大小时,大小存在巨大差异(复制的dir大约是原始大小的两倍 - 使用'du -sh'检查)。

然后我尝试使用nio.FileChannels,如下所示:

public static void copyFile(File in, File out) throws IOException {
    FileChannel source = new FileInputStream(in).getChannel();
    FileChannel destination = new FileOutputStream(out).getChannel();

        source.transferTo(0, source.size(), destination);

    source.close();
    destination.close();
}

为目录中的每个文件调用此方法。此变化的最终尺寸也是原始尺寸的两倍。如果我列出目录的内容,它们是相同的。

是否有任何遗漏的参数或可能导致此尺寸差异的事情?

2 个答案:

答案 0 :(得分:1)

不确定发生了什么,但你可以use diff to diff directories。我确信这会轻易地消除差异。

答案 1 :(得分:1)

javadoc说copyDirectoryToDirectory将源目录及其所有内容复制到指定目标目录中的同名目录。

没有看到你的目录结构,我猜这可能会导致双重数据。您没有使用简单FileUtils.copyDirectory()的原因?