Ich möchte ein Verzeichnis mit Java erstellen und löschen, aber es funktioniert nicht.
File index = new File("/home/Work/Indexer1");
if (!index.exists()) {
index.mkdir();
} else {
index.delete();
if (!index.exists()) {
index.mkdir();
}
}
java
file-io
delete-directory
Mr.G.
quelle
quelle
Antworten:
Java kann keine Ordner mit darin enthaltenen Daten löschen. Sie müssen alle Dateien löschen, bevor Sie den Ordner löschen.
Verwenden Sie etwas wie:
Dann sollten Sie in der Lage sein, den Ordner mit
index.delete()
Untested zu löschen !quelle
FileUtils.deleteDirectory
wie @Francesco Menzani sagte.if (!index.delete()) {...}
. Wenn der Index ein symbolischer Link ist, wird er gelöscht, unabhängig davon, ob er Inhalt enthält.entries
null ist.Nur ein Einzeiler.
Dokumentation hier
quelle
Dies funktioniert, und obwohl es ineffizient erscheint, den Verzeichnistest zu überspringen, ist dies nicht der Fall: Der Test findet sofort in statt
listFiles()
.Aktualisieren Sie, um folgende symbolische Links zu vermeiden:
quelle
Ich bevorzuge diese Lösung auf Java 8:
Von dieser Site: http://www.baeldung.com/java-delete-directory
quelle
Files.walk()
, was in den API-Dokumenten explizit angegeben ist. Ich weiß, wenn Sie den vonFiles.list()
beispielsweise zurückgegebenen Stream nicht schließen , können Ihnen die Handles ausgehen und das Programm stürzt ab. Siehe z . B. stackoverflow.com/q/36990053/421049 und stackoverflow.com/q/26997240/421049 .In JDK 7 können Sie einen Dateibaum verwenden
Files.walkFileTree()
undFiles.deleteIfExists()
löschen. (Beispiel: http://fahdshariff.blogspot.ru/2011/08/java-7-deleting-directory-by-walking.html )In JDK 6 besteht eine Möglichkeit darin, FileUtils.deleteQuietly aus Apache Commons zu verwenden, um eine Datei, ein Verzeichnis oder ein Verzeichnis mit Dateien und Unterverzeichnissen zu entfernen.
quelle
Mit Apache Commons-IO folgt es einem Einzeiler:
Dies ist (etwas) performanter als
FileUtils.deleteDirectory
.quelle
Wie bereits erwähnt, kann Java keinen Ordner löschen, der Dateien enthält. Löschen Sie daher zuerst die Dateien und dann den Ordner.
Hier ist ein einfaches Beispiel dafür:
Oder:
quelle
Meine rekursive Basisversion, die mit älteren Versionen von JDK arbeitet:
quelle
listFiles()
null zurückgegeben wird, anstatt aufzurufenisDirectory()
.Dies ist die beste Lösung für
Java 7+
:quelle
Guave 21+ zur Rettung. Nur verwenden, wenn keine Symlinks auf das zu löschende Verzeichnis verweisen.
(Diese Frage ist von Google gut indiziert, sodass andere Benutzer von Guava diese Antwort möglicherweise gerne finden, auch wenn sie mit anderen Antworten an anderer Stelle überflüssig ist.)
quelle
Diese Lösung gefällt mir am besten. Es wird keine Bibliothek von Drittanbietern verwendet, sondern NIO2 von Java 7.
quelle
Eine weitere Möglichkeit besteht darin, die
org.springframework.util.FileSystemUtils
relevante Methode von Spring zu verwenden, mit der der gesamte Inhalt des Verzeichnisses rekursiv gelöscht wird.Das wird den Job machen!
quelle
In diesem
Du rufst an
nach dem
Dies bedeutet, dass Sie die Datei nach dem Löschen von File.delete () erneut erstellen und einen booleschen Wert zurückgeben. Wenn Sie dies überprüfen möchten, tun
System.out.println(index.delete());
Sie dies, wenn Sie erhaltentrue
Dies bedeutet, dass die Datei gelöscht wirdAus den unten angegebenen Kommentaren geht hervor , dass die aktualisierte Antwort so lautet
quelle
Wenn Sie Unterordner haben, werden Sie Probleme mit den Cemron-Antworten finden. Sie sollten also eine Methode erstellen, die folgendermaßen funktioniert:
quelle
Sie können FileUtils.deleteDirectory verwenden . JAVA kann die nicht leeren Foldres nicht mit File.delete () löschen .
quelle
directry kann nicht einfach löschen, wenn die Dateien vorhanden sind. Daher müssen Sie möglicherweise zuerst die Dateien im Verzeichnis und dann im Verzeichnis löschen
quelle
Sie können rekursiv aufrufen, wenn Unterverzeichnisse vorhanden sind
quelle
wir können die
spring-core
Abhängigkeit nutzen;quelle
Die meisten Antworten (auch neuere), die auf JDK-Klassen verweisen, basieren auf,
File.delete()
aber dies ist eine fehlerhafte API, da der Vorgang möglicherweise unbemerkt fehlschlägt.In der
java.io.File.delete()
Methodendokumentation heißt es:Als Ersatz sollten Sie bevorzugen,
Files.delete(Path p)
dass eineIOException
mit einer Fehlermeldung ausgelöst wird.Der eigentliche Code könnte wie folgt geschrieben werden:
quelle
Sie können wie folgt versuchen
Wenn sich in Ihrem Ordner Unterordner befinden, müssen Sie diese möglicherweise rekursiv löschen.
quelle
quelle
Klappt wunderbar . Für Ordner und Dateien. Salam :)
quelle
Entfernen Sie es vom anderen Teil
quelle
Einige dieser Antworten scheinen unnötig lang zu sein:
Funktioniert auch für Unterverzeichnisse.
quelle
Sie können diese Funktion verwenden
quelle