2010-10-21 14 views
8

W mojej aplikacji napisałem kod, aby usunąć katalog z dysku, ale kiedy sprawdzam funkcję usuwania pliku, nie kasuje pliku. Pisałem kilka rzeczy jak tennie można usunąć katalogu przez Javę

//Code to delete the directory if it exists 
File directory = new File("c:\\Report\\"); 
if(directory.exists()) 
directory.delete(); 

się directoryis nie używany nadal nie jest w stanie usunąć katalog

Odpowiedz

18

w Javie, katalog/usunięcie jest możliwe tylko dla pustego katalogu, whi ch prowadzi do metod takich jak następuje:

/** 
* Force deletion of directory 
* @param path 
* @return 
*/ 
static public boolean deleteDirectory(File path) { 
    if (path.exists()) { 
     File[] files = path.listFiles(); 
     for (int i = 0; i < files.length; i++) { 
      if (files[i].isDirectory()) { 
       deleteDirectory(files[i]); 
      } else { 
       files[i].delete(); 
      } 
     } 
    } 
    return (path.delete()); 
} 

Ten będzie usunąć folder, nawet jeśli nie jest pusta, bez problemów (z wyjątkiem, gdy ten katalog jest zablokowany przez system operacyjny).

1

katalog musi być pusty, aby go usunąć. Jeśli to nie jest pusty, trzeba go usunąć rekursywnie z File.listFiles() i() File.delete

1

Dwa inne możliwości (poza katalog nie jest pusty):

  • Użytkownik, który uruchamia Program Java nie ma zapisu/kasowania uprawnienia dla katalogu
  • katalog służy zablokowany przez inny proces (piszesz, że to nie jest, ale jak masz to potwierdził?)
2

Patrząc na docs:

Jeśli ta ścieżka oznacza katalog, to katalog musi być pusty, aby zostać usunięte.

Czy upewniłeś się, że katalog jest pusty (również żadne ukryte pliki)?

13

Dlaczego wymyślić koło z metodami kasowania rekursywnie? Spójrz na Apache commons io. https://commons.apache.org/proper/commons-io/javadocs/api-1.4/

FileUtils.deleteDirectory(dir); 

LUB

FileUtils.forceDelete(dir); 

To wszystko, czego potrzebujesz. Istnieje również wiele przydatnych metod do manipulowania plikami ...

+0

Uwielbiam, gdy coś jest już napisane. Kompletnie się zgadzam. Dzięki za heads-up. – Aaron

+0

FileUtils # deleteDirectory i FileUtils # implementacje forceDelete wykonują to również rekurencyjnie ... –

Powiązane problemy