Java,IO - 删除文件的最快方法

Posted

技术标签:

【中文标题】Java,IO - 删除文件的最快方法【英文标题】:Java, IO - fastest way to remove file 【发布时间】:2011-03-22 07:25:12 【问题描述】:

我的问题是我有一个应用程序正在编写大量相对 (100-500kb) 的小型 CSV 文件(数万和数十万)。然后这些文件的内容通过 sql loader 调用(它的 oracle db)加载到数据库中,这就是我必须忍受的。

因此,我需要不时删除这些小文件,以防止它们占用所有空间。我想将它附加到写入这些文件并将它们加载到 db 作为最后一个最终步骤的活动中。

我的问题是——在 java 中如何以更少的性能开销删除一堆小文件?

提前致谢! 迈克尔

【问题讨论】:

另见:***.com/questions/20281835/… 【参考方案1】:

好吧,file.delete() 就足够了(它在内部被实现为原生方法)

【讨论】:

如果文件或目录被成功删除,delete() 方法还会返回一个布尔值。 我希望,但无论如何都会制作原型并尝试时间。 您还可以考虑使用 delete() 方法删除完整目录。如果这可行,它可能会进行一些优化,使其更快,但我倾向于相信它会失败。【参考方案2】:

如果您掏空并让系统删除它们,您可能会发现它的速度要快一个数量级。您必须能够到达一个停止点(没有文件正在处理),然后删除并删除“*”或 . 或任何适用于您的操作系统的内容。

(注意,这会让你的程序非常依赖操作系统!)

请确保您在 Windows 和 Mac 上绕过了垃圾箱功能!

del . 或 rm * 的好处是它们应该批处理操作,而不是重复打开、修改和关闭目录。

您还可以使用 a001、a002、a003 等模式编写文件名,当您达到 a999 时,您转到 b001 并删除 a*。

【讨论】:

也对。我会进一步解决这个问题。非常感谢! @Zorkus 一定要进行测试,而不仅仅是假设我是对的,我很确定我过去已经测试过它并发现它是准确的,但它可能是非常 OS/Java 版本/取决于月相。【参考方案3】:

我建议检查Apache Commons IO 库。他们有一些非常有用的方法来删除 FileUtils 类中的文件。

【讨论】:

所以我对 File.delete 进行了测试,发现它在平均 0.5-1 毫秒内删除了一个文件(在生成的 1000、10000、50000 个小文件的熟集上进行了测试)。谢谢大家的想法!它应该对我有用..【参考方案4】:
FileUtils.cleanDirectory(new File("/usr/share/test")); //linux

FileUtils.cleanDirectory(new File("C:\\test")); //windows

【讨论】:

【参考方案5】:

你可以使用java.nio.file.Files的以下方法

delete(Path path)
deleteIfExists(Path path)

更多信息请参考this article

【讨论】:

以上是关于Java,IO - 删除文件的最快方法的主要内容,如果未能解决你的问题,请参考以下文章

Java io中File类中 删除文件的相关问题~

java基础IO删除文件夹文件

Java:删除某文件夹下的所有文件该如何实现呢?

在 Access DB 中删除重复项的最快方法

java中如何用io流删除一个文本中的数据?

java IO流的一些操作方法