递归删除目录

时间:2011-07-28 18:14:39

标签: 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”实例的正确方法,请继续并删除?

2 个答案:

答案 0 :(得分:1)

那不行。

File[] filesInWordFolder = file.listFiles();

if(!filesInWordFolder.toString().contains("media"))

将为您提供File数组的字符串表示形式 - 通常会有一个引用。

您必须遍历这些文件,以查明其中是否包含单词media。

boolean containsMedia = false;

for ( File file : filesInWordFolder ) {

if ( file.getName().contains("media") ){
 containsMedia = true;
break;
}

// now check your boolean
if ( !containsMedia ) {

答案 1 :(得分:0)

使用toString(),将为您提供文件的字符串表示形式(在本例中为文件)。 String表示应包含文件名。如果您的目的是检查目录中包含“media”一词的文件的任何实例,那么您没问题。

在示例中,您将打印File数组的String表示形式。相反,您应该遍历File数组并检查每个文件的String表示,如下所示:

for (int i = 0; i < file_array.length; i++) {
  if ((File)file_array[i]).toString().equals("your_search_term")) {
    // The file contains your search term
  } else {
    // Doesn't contain the search term.
  }
}