Рекурсивное удаление каталога - PullRequest
0 голосов
/ 28 июля 2011

У меня есть этот фрагмент кода:

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», то он должен перечислить содержимое слова, а затем, если каталог с именем «media» НЕ выполняет.существуют, рекурсивно удаляют все в родительском каталоге «word».

Моя главная проблема связана с этим условием:

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

Это правильный способ сказать, что файлы в этомМассив не содержит экземпляр "изображения", иди дальше и удалишь?

Ответы [ 2 ]

1 голос
/ 28 июля 2011

Это не сработает.

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 ) {
0 голосов
/ 28 июля 2011

Хорошо, используя toString(), вы получите строковое представление файла (в данном случае файлов).Представление String должно содержать имя файла.Если ваша заданная цель - проверить наличие какого-либо экземпляра файла, содержащего слово «media» в каталоге, у вас все в порядке.

В этом примере вы печатаете строковое представление массива File.Вместо этого вам следует перебрать массив файлов и проверить строковое представление каждого отдельного файла следующим образом:

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.
  }
}
...