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 - 删除文件的最快方法的主要内容,如果未能解决你的问题,请参考以下文章