我有这一段代码:
public static void delete(File f) throws IOException
{
if (f.isDirectory())
{
for (File c : f.listFiles())
{
delete(c);
}
}
else if (!f.delete())
{
throw new FileNotFoundException("Failed to delete file: " + f);
}
}
public static void traverseDelete(File directory) throws FileNotFoundException, InterruptedException
{
//Get all files in directory
File[] files = directory.listFiles();
for (File file : files)
{
if (file.getName().equalsIgnoreCase("word"))
{
boolean containsMedia = false;
File[] filesInWordFolder = file.listFiles();
for ( File file2 : filesInWordFolder )
{
if ( file2.getName().contains("media"))
{
containsMedia = true;
break;
}
}
if (containsMedia == false)
{
try
{
delete(file.getParentFile());
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
else if (file.isDirectory())
{
traverseDelete(file);
}
}
}
很抱歉没有发表评论,但我认为这是不言自明的。本质上,代码应该做的是遍历给定目录中的一组文件,如果遇到名为“word”的目录,那么它应该列出 word 的内容,然后如果名为“media”的目录没有列出存在,递归删除“word”下父目录下的所有内容。
我主要关心的是这个条件:
if(!filesInWordFolder.toString().contains("media"))
如果该数组中的文件不包含“image”实例,则继续删除,这是正确的方法吗?
最佳答案
那是行不通的。
File[] filesInWordFolder = file.listFiles();
if(!filesInWordFolder.toString().contains("media"))
将为您提供文件数组的字符串表示形式——通常会有一个引用。
您必须遍历这些文件以找出其中是否有包含单词 media 的文件。
boolean containsMedia = false;
for ( File file : filesInWordFolder ) {
if ( file.getName().contains("media") ){
containsMedia = true;
break;
}
// now check your boolean
if ( !containsMedia ) {
关于java - 递归删除目录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6863681/