java - 递归删除目录

标签 java file recursion traversal delete-file

我有这一段代码:

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/

相关文章:

java - 如何在hibernate envers中查询相关实体?

java - 在 Java 中,为什么 WindowsPreferences 对大写字母使用斜杠?

java - JPanel 覆盖 revalidate()

c++ - 递归函数不返回指定值

javascript - 避免树行走递归的最佳方法

java - 如何添加 Flyway 依赖项并构建原生图像 Quarkus java.lang.ClassNotFoundException : org. jboss.vfs.VirtualFileFilter

android - 在Android中,File.renameTo会覆盖目标文件吗?

linux - 为什么 bash 不能识别套接字文件的存在

file - 通过互联网发送文件的可靠方式

php - 嵌套/递归 MySQL 查询