Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 文件复制后目录大小不匹配_Java_Apache_Nio_Apache Commons - Fatal编程技术网

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

Java 文件复制后目录大小不匹配,java,apache,nio,apache-commons,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 { Fil

希望有人以前见过。我试图将所有目录内容从源目录复制到另一个目录,为此,我开始使用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字符串。问题是,当我在执行后检查结果目录大小时,大小存在巨大差异(复制的目录大约是原始目录大小的两倍,使用“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();
}
为目录中的每个文件调用此方法。这种变化产生的尺寸也是原始尺寸的两倍左右。如果我列出目录的内容,它们是相同的


是否有任何缺少的参数或可能导致此大小差异的东西?

不确定发生了什么,但您可以。我相信这会很容易地消除差异。

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


如果没有看到您的目录结构,我猜这可能会导致双重数据。你为什么不使用简单的

你确定你没有运行过两次测试,在dest dir中创建了副本(不知何故)?复制操作所遵循的目录中可能有软链接或硬链接,而不仅仅是复制链接?@matt b-我确定:),@Sven-听起来有可能,现在检查…与软链接或硬链接无关。跳过这些返回相同的输出文件大小是否正确?此命令不会报告任何差异。如果我列出两个文件中的文件,它们是相同的:(