Chcę utworzyć i usunąć katalog za pomocą Java, ale to nie działa.
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
Pan G.
źródło
źródło
Odpowiedzi:
Java nie może usunąć folderów zawierających dane. Musisz usunąć wszystkie pliki przed usunięciem folderu.
Użyj czegoś takiego:
Wtedy powinieneś być w stanie usunąć folder za pomocą
index.delete()
Untested!źródło
FileUtils.deleteDirectory
jak powiedział @Francesco Menzani.if (!index.delete()) {...}
. Następnie, jeśli indeks jest dowiązaniem symbolicznym, jest usuwany niezależnie od tego, czy wygląda na to, że ma zawartość.entries
jest pusty.Tylko jeden wiersz.
Dokumentacja tutaj
źródło
To działa i chociaż pomijanie testu katalogu wydaje się nieefektywne, tak nie jest: test jest wykonywany od razu w
listFiles()
.Zaktualizuj, aby uniknąć następujących dowiązań symbolicznych:
źródło
Wolę to rozwiązanie w java 8:
Z tej witryny: http://www.baeldung.com/java-delete-directory
źródło
Files.walk()
, co jest wyraźnie wskazane w dokumentacji interfejsu API. Wiem, że jeśli nie zamkniesz strumienia zwróconegoFiles.list()
na przykład przez, możesz zabraknąć uchwytów i program się zawiesi. Zobacz np. Stackoverflow.com/q/36990053/421049 i stackoverflow.com/q/26997240/421049 .W JDK 7 można było używać
Files.walkFileTree()
iFiles.deleteIfExists()
usuwać drzewo plików. (Przykład: http://fahdshariff.blogspot.ru/2011/08/java-7-deleting-directory-by-walking.html )W JDK 6 jednym z możliwych sposobów jest użycie FileUtils.deleteQuietly z Apache Commons, które usunie plik, katalog lub katalog z plikami i podkatalogami.
źródło
Korzystając z Apache Commons-IO, jest to jeden wiersz:
Jest to (nieco) bardziej wydajne niż
FileUtils.deleteDirectory
.źródło
Jak wspomniano, Java nie może usunąć folderu zawierającego pliki, dlatego najpierw usuń pliki, a następnie folder.
Oto prosty przykład, jak to zrobić:
Lub:
źródło
Moja podstawowa wersja rekurencyjna, działająca ze starszymi wersjami JDK:
źródło
listFiles()
zwraca null, zamiast wywoływaćisDirectory()
.To najlepsze rozwiązanie dla
Java 7+
:źródło
Na ratunek guawa 21+. Używaj tylko wtedy, gdy nie ma dowiązań symbolicznych wskazujących na katalog do usunięcia.
(To pytanie jest dobrze zindeksowane przez Google, więc inne osoby używające guawy mogą być szczęśliwe, gdy znajdą tę odpowiedź, nawet jeśli jest ona zbędna w przypadku innych odpowiedzi w innych miejscach).
źródło
Najbardziej podoba mi się to rozwiązanie. Nie korzysta z biblioteki innej firmy, zamiast tego używa NIO2 Java 7.
źródło
Jeszcze jeden wybór to użycie
org.springframework.util.FileSystemUtils
odpowiedniej metody Springa, która rekurencyjnie usunie całą zawartość katalogu.To wystarczy!
źródło
W tym
dzwonisz
po
Oznacza to, że tworzysz plik ponownie po usunięciu File.delete () zwraca wartość logiczną, więc jeśli chcesz sprawdzić, zrób,
System.out.println(index.delete());
jeśli otrzymasz,true
oznacza to, że plik został usuniętyz komentarzy podanych poniżej, zaktualizowana odpowiedź jest taka
źródło
Jeśli masz podfoldery, napotkasz problemy z odpowiedziami Cemron. więc powinieneś stworzyć metodę, która działa tak:
źródło
Możesz użyć FileUtils.deleteDirectory . JAVA nie może usunąć niepustych folderów za pomocą File.delete () .
źródło
Directry nie może po prostu usunąć, jeśli zawiera pliki, więc może być konieczne usunięcie najpierw plików, a następnie katalogu
źródło
Możesz wykonać wywołanie rekurencyjne, jeśli istnieją podkatalogi
źródło
możemy użyć
spring-core
zależności;źródło
Większość odpowiedzi (nawet ostatnich) odnoszących się do klas JDK polega na
File.delete()
tym, że jest to wadliwy interfejs API, ponieważ operacja może zakończyć się cichym niepowodzeniem.Dokumentacja
java.io.File.delete()
metody stwierdza:Jako zamiennik powinieneś preferować,
Files.delete(Path p)
że wyrzuca komunikatIOException
z komunikatem o błędzie.Rzeczywisty kod można napisać na przykład:
źródło
możesz spróbować w następujący sposób
Jeśli w folderze znajdują się podfoldery, może być konieczne ich rekurencyjne usuwanie.
źródło
źródło
Działa jak marzenie . Zarówno w przypadku folderów, jak i plików. Salam :)
źródło
Usuń go z innej części
źródło
Niektóre z tych odpowiedzi wydają się niepotrzebnie długie:
Działa również dla podkatalogów.
źródło
Możesz użyć tej funkcji
źródło