【发布时间】:2014-03-17 20:33:32
【问题描述】:
我有一个将 PDF 文件(子文件夹)复制到目标文件夹的小应用程序。但是它的工作速度很慢,我想对其进行优化。你能帮帮我吗?
代码:
public void pdfFolderCopy(File src, File dest)
throws IOException {
if (src.isDirectory()) {
if (!dest.exists()) {
dest.mkdir();
}
String files[] = src.list();
for (String file : files) {
File srcFile = new File(src, file);
File destFile = new File(dest, file);
pdfFolderCopy(srcFile, destFile);
}
} else {
if (!dest.exists()) {
System.out.println("Copying: " + src);
//Use the Apache IO copyFile method:
FileUtils.copyFile(src, dest);
}
}
}
如果每个文件都已经存在,它会运行大约一分半钟。如果我们需要复制大约 500 个文件,大约需要 5 分钟。
【问题讨论】:
-
看不出为什么会这么慢。尝试记录几次
-
我认为这也取决于文件的大小。它们有多大??
-
大约有 15.000 个文件,平均 100K 个文件zie。
-
也许多线程复制可以更快地工作。例如,前四个根文件夹可以由四个线程处理。我不知道 File 对象是否可以用于不同的文件,但它可以更快,而无需为每个文件重新创建。检查最大的文件,为其创建一个对象,为所有人重新使用它(我不确定这是否会删除硬盘中的所有内容,所以你应该小心)
-
@huseyintugrulbuyukisik:多线程可能是个好主意,但重用
File是无稽之谈。File是一个廉价的对象,有点像包装的String并且它是不可变的。创建数千个可能需要几毫秒。
标签: java file pdf optimization copy