2009-05-13 15 views

Antwort

6

Nach dtsazza's answer tun:

Runtime.getRuntime().exec("cmd.exe /k rd /s /q c:\\folder"); 

Es funktioniert perfekt unter WinXP SP3. Der Parameter /k zeigt an, dass ein Befehl folgt, der aus dem cmd.exe ausgeführt werden muss.

Viel Glück damit!

+0

genau das, was ich gesucht habe! –

+3

Obwohl Sie natürlich den umgekehrten Schrägstrich (c: \\ Ordner) verdoppeln müssen –

5

Überprüfen Sie die Methode Runtime.exec, mit der Sie externe Prozesse aufrufen können. (Denken Sie daran, dass Sie einige Plattformunabhängigkeit verlieren, da dies darauf angewiesen wäre, dass der Computer den Befehl rd installiert und auf dem Pfad installiert hat.)

Eine bessere Option könnte sein, dasselbe in reinem Java zu tun - Folgendes sollte sein Entsprechung:

private void deleteDirectory(File directory) 
{ 
    for (File entity : directory.listFiles()) 
    { 
     if (entity.isDirectory()) 
     { 
     deleteDirectory(entity); 
     } 
     else 
     { 
     entity.delete(); 
     } 
    } 
    directory.delete(); 
} 

deleteDirectory(new File("C:\\folder")); 

Hinzufügen einer Fehlerprüfung wie erforderlich. :-)

+0

rd funktioniert gut in der Eingabeaufforderung, aber nicht durch Runtime.exec() -Funktion. –

+1

das ist, weil 'rd' ist ein eingebauter Befehl in 'cmd.exe' – Alnitak

+0

ok, aber wie führe ich es in Java irgendwelche Ideen ?? –

2

Blick auf File.delete(String path) Methode, das heißt:

new File("c:\\folder").delete(); 

Wenn die /s (rekursiv) Löschen wichtig ist, dann ist (nicht getestet):

public void deltree(File file) { 
    if (file.isDirectory()) { 
     for (File f : file.listFiles()) { 
      deltree(f); 
     } 
    } 
    file.delete(); 
} 

public void deltree(String path) { 
    deltree(new File(path)); 
} 

als aufgerufen:

deltree("c:\\folder"); 
+0

das löscht nicht den Ordner der enthält Dateien oder/und Ordner. –

+0

überlappende Bearbeitungen - bitte Kommentar entfernen. – Alnitak

+0

File.delete() gibt ein boolesches Flag zurück, das angibt, ob das Löschen erfolgreich war, anstatt eine IOException auszulösen; solltest du das überprüfen? –

1

Sie können nur leere Verzeichnisse in Java löschen. Zuerst müssen Sie die Dateien und Unterverzeichnisse löschen.

public static boolean removeDirectoryRecursively(File dir) { 
      if (dir.isDirectory()) { 
       String[] children = dir.list(); 
       for (int i = 0; i < children.length; i++) { 
        boolean success = removeDirectoryRecursively(new File(dir, children[i])); 
        if (!success) { 
         return false; 
        } 
       } 
      } 
      // The directory is now empty so delete it 
      return dir.delete(); 
     } 
+0

File.listFiles() ist viel einfacher – Alnitak

3

Überprüfen Sie FileUtils in Apache Commons-IO; insbesondere die Methoden deleteDirectory und deleteQuietly, die ein Verzeichnis rekursiv löschen können.

1

Wenn Sie es genau so, wie Sie angegeben ausführen möchten, können Sie

Process p=Runtime.getRuntime().exec("cmd.exe /k rd /s /q c:\\folder"); 
+0

Nach allem "es funktioniert perfekt in der Eingabeaufforderung." :) –

+0

das funktioniert nicht –

Verwandte Themen