在 Java 中删除非空目录

2022-09-01 08:47:34

假设我有一个代表目录的目录,那么只有当目录为空时才会删除该目录。我在网上找到了几个示例,这些示例使用或获取目录中的所有文件,然后递归遍历目录结构并删除所有文件。但是,由于可以创建无限递归的目录结构(在Windows和Linux中(带有符号链接)),因此以这种风格编写的程序可能永远不会终止。File ff.delete()File.listFiles()File.list()

那么,有没有更好的方法来编写这样的程序,这样它就不会陷入这些陷阱呢?我是否需要跟踪我走过的任何地方,并确保我不会兜圈子,或者有没有更好的方法?

更新:为了回应一些答案(谢谢大家!) - 我宁愿代码不遵循符号链接并留在它应该删除的目录中。我可以依靠Commons-IO实现来做到这一点吗,即使在Windows的情况下也是如此?


答案 1

如果你真的希望你的递归目录删除通过符号链接,那么我认为没有任何独立于平台的方式来做到这一点,而不跟踪你遍历的所有目录。

但是,在几乎所有情况下,我都能想到您只想删除指向目录的实际符号链接,而不是递归地遵循符号链接。

如果这是您想要的行为,那么您可以在Apache Commons IO中使用FileUtils.deleteDirectory方法。


答案 2

尝试Apache Commons IO进行测试。

但是,我不认为它能处理无限递归问题。