如何在 Java 中删除目录内容? [复制]
Posted
技术标签:
【中文标题】如何在 Java 中删除目录内容? [复制]【英文标题】:How to delete directory content in Java? [duplicate] 【发布时间】:2011-12-07 18:12:50 【问题描述】:枚举目录后,我现在需要删除所有文件。
我用过:
final File[] files = outputFolder.listFiles();
files.delete();
但这并没有删除目录。
【问题讨论】:
它甚至可以编译吗?你在数组上调用 delete。 【参考方案1】:您必须为每个文件执行此操作:
public static void deleteFolder(File folder)
File[] files = folder.listFiles();
if(files!=null) //some JVMs return null for empty dirs
for(File f: files)
if(f.isDirectory())
deleteFolder(f);
else
f.delete();
folder.delete();
然后调用
deleteFolder(outputFolder);
【讨论】:
+1。但是,最后一行应该是outputFolder.delete()
而不是 output.delete()
。
我试过了,但是当我打开浏览器时,文件夹仍然在这里并且包含所有文件...
如果其中一个文件是非空目录,则不会工作。您必须递归地删除目录内容。 if(f.isDirectory())myDelete(f)
你说得对,改了代码
我在 for(File f: files) 上得到了 nullPointerExcpetion【参考方案2】:
删除包含文件的文件夹,无需循环或递归搜索。可以直接使用:
FileUtils.deleteDirectory(<File object of directory>);
此功能将目录删除文件夹及其中的所有文件。
【讨论】:
我猜你的意思是commons-io方法:org.apache.commons.io.FileUtils.deleteDirectory(File) 快到了!问题是如何删除文件夹的内容(不是过滤器本身) - commons-io 也有一个方法:FileUtils.cleanDirectory(File); 有没有类似的方法只删除文件夹内的文件而不删除文件夹本身?? @Lucy 检查上面的评论。您可以使用 Daniel 提到的 FileUtils.cleanDirectory(File) 方法【参考方案3】:在删除之前必须从目录中删除所有文件。
有些第三方库有很多常用的实用程序,包括那些为您做这些的:
阿帕奇commons-langFileUtils.forceDelete(..)
guavaFiles.deleteRecursively(..)
【讨论】:
不幸的是,Files.deleteRecursively()
was removed from Guava 在 11.0 版中。
FileUtils.forceDelete() 属于 commons-io。【参考方案4】:
你不能删除数组!这应该会更好:
for (File f : files) f.delete();
但如果文件夹不为空,它将不起作用。对于这种情况,您需要递归地进入文件夹层次结构并删除所有内容。是的,很遗憾Java默认不能做到这一点......
【讨论】:
【参考方案5】:这是在没有库的情况下解决问题的一种可能解决方案:
public static boolean delete(File file)
File[] flist = null;
if(file == null)
return false;
if (file.isFile())
return file.delete();
if (!file.isDirectory())
return false;
flist = file.listFiles();
if (flist != null && flist.length > 0)
for (File f : flist)
if (!delete(f))
return false;
return file.delete();
【讨论】:
此代码块:“if (!delete(f)) return false; ”可以替换为“return delete(f);”不能吗?【参考方案6】:您不能删除 File
数组。正如所有其他答案所暗示的那样,您必须在删除文件夹之前删除每个单独的文件...
final File[] files = outputFolder.listFiles();
for (File f: files) f.delete();
outputFolder.delete();
【讨论】:
【参考方案7】:将 FileUtils 与 FileUtils.deleteDirectory() 一起使用;
【讨论】:
最好提到FileUtils
是 Apache Commons IO 的一部分。【参考方案8】:
for(File f : files)
f.delete();
files.delete(); // will work
【讨论】:
以上是关于如何在 Java 中删除目录内容? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何 grep 字符串的目录,将其重写为其他内容并保存在 bash 中? [复制]
java 如何把一个目录下的所有.java文件复制到另一个目录下,并保持其结构不变