希望有人以前见过这个。我正在尝试将所有目录内容从源复制到另一个目录,为此我开始使用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();
}
为目录中的每个文件调用此方法。此变化的最终尺寸也是原始尺寸的两倍。如果我列出目录的内容,它们是相同的。
是否有任何遗漏的参数或可能导致此尺寸差异的事情?
答案 0 :(得分:1)
不确定发生了什么,但你可以use diff to diff directories。我确信这会轻易地消除差异。
答案 1 :(得分:1)
javadoc说copyDirectoryToDirectory
将源目录及其所有内容复制到指定目标目录中的同名目录。
没有看到你的目录结构,我猜这可能会导致双重数据。您没有使用简单FileUtils.copyDirectory()的原因?