2014-09-30 3 views
0

Я пытаюсь удалить каталог рекурсивно. Но у меня проблемы. Итак, я создаю в своей «тестовой» папке некоторые каталоги, как показано на картинке. Но в третьей папке он генерирует исключение java.lang.NullPointerException.Рекурсивное удаление каталогов

Вот картинка и некоторый код:

public static void RecursiveRm (String myFile) 
{ 
    File fl = new File(myFile); 
    String [] temp = fl.list(); 
    if(temp.length > 0){ 
     for (int i = 0; i < temp.length; ++i){ 
      myFile = myFile + "/" + temp[i]; 
      RecursiveRm(myFile); 
     } 
    } 
    else 
     fl.delete(); 
} 

Вот как это работает

That's how it works

+1

Не могли бы вы рассказать нам, что исключение он бросает? (NullPointerException, IOException и т. Д.) –

+1

Добавьте весь стек. – Jens

+0

Несомненно, он добавляется в вопрос –

ответ

4

Вы не должны делать это для начала.

myFile = myFile + "/" + temp[i]; 

Это означает, что если у вас есть каталог с ab и c в нем путь станет /a/b/c Вы должны избегать изменения myFile

Попробуйте вместо этого.

for(String file: new File(myFile).list()) { 
    recursiveRm(myFile + "/" + file); 
} 
fl.delete(); 

Скорее всего, вы получаете NullPointerException, как File.list() возвращение null, если каталог не существует.

+1

Dayymn. Это работает!!! Спасибо =) –

+0

Он работает как часы) –

2

После просмотра кода вы получаете исключение NullPointerException из fl.list(), если подкаталог не найден. В вашем изменении кода:

if(temp.length > 0) 

в

if(temp != null && temp.length > 0) 

Полный изменил код:

public static void RecursiveRm (String myFile) 
{ 
    File fl = new File(myFile); 
    String [] temp = fl.list(); 
    if(temp != null && temp.length > 0){ 
     for (int i = 0; i < temp.length; ++i){ 
      myFile = myFile + "/" + temp[i]; 
      RecursiveRm(myFile); 
     } 
    } 

    fl.delete(); 
} 
+0

Да, это проблема, о которой упоминалось на картинке. Спасибо =) –

+0

Я пробовал ваш код. Он не работает = ( –

+0

Извините, я снова запустил его и понял, что произошла логическая ошибка. Удалите 'else' Я обновил и протестировал свой ответ. – milk3422