删除Java中的非空目录

Mar*_*lty 30 java recursion file-io

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

那么,有没有更好的方法来编写这样的程序,以便它不会陷入这些陷阱?我是否需要跟踪我所经过的所有地方,并确保我不会绕圈或是否有更好的方式?

更新:回答一些答案(谢谢大家!) - 我宁愿代码没有遵循符号链接并保留在它应该删除的目录中.即使在Windows情况下,我可以依赖Commons-IO实现吗?

Il-*_*ima 33

如果你真的希望你的递归目录删除遵循符号链接,那么我认为没有任何平台独立的方式这样做而不跟踪你已经遍历的所有目录.

但是,几乎在每种情况下我都能想到你只想删除指向目录的实际符号链接,而不是通过符号链接递归跟踪.

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


Jos*_*Fox 8

尝试使用Apache Commons IO进行经过测试的实施.

但是,我不认为这会处理无限递归问题.

  • 看看来源:http://svn.apache.org/viewvc/commons/proper/io/trunk/src/java/org/apache/commons/io/FileUtils.java?view=markup你会看到deleteDirectory没有不遵循象征性的联系. (2认同)