Supponendo di avere un File f
che rappresenta una directory, quindi f.delete()
eliminerà la directory solo se è vuota. Ho trovato uno couple di examples online che utilizza File.listFiles()
o File.list()
per ottenere tutti i file nella directory e poi attraversa in modo ricorsivo la struttura di directory ed elimina tutti i file. Tuttavia, poiché è possibile creare strutture di directory infinitamente ricorsive (sia in Windows sia in Linux (con collegamenti simbolici)) presumibilmente è possibile che i programmi scritti con questo stile non possano mai terminare.Eliminazione di directory non vuote in Java
Quindi, c'è un modo migliore per scrivere un programma di questo tipo in modo che non cada in queste insidie? Devo tenere traccia di tutto ciò che ho attraversato e assicurarmi di non girare in tondo o c'è un modo più bello?
Aggiornamento: In risposta ad alcune delle risposte (grazie ragazzi!) - Preferirei che il codice non seguisse collegamenti simbolici e rimase nella directory che avrebbe dovuto eliminare. Posso fare affidamento sull'implementazione Commons-IO per farlo, anche nel caso di Windows?
Avrei pensato che avrebbe rallentato una cancellazione ricorsiva un po '. Non potresti fare un file.getPath(). Equals (File.getCanonicalPath())? –
Non sono sicuro di quanti miliardi di directory ricorsive si desidera elaborare, ma Map.put() e Map.contains() per directory non rallenteranno. Il codice che hai suggerito ti direbbe solo che da qualche parte nel tuo percorso ci sono collegamenti simbolici. Potrebbero essere sopra la directory che si desidera eliminare. – Bombe
Onestamente: preoccuparsi di ottenere il lavoro prima.Solo se funziona perfettamente e puoi misurare che è _too_ slow (qualunque cosa ciò significhi), solo allora inizierai a preoccuparti delle prestazioni. L'ottimizzazione prematura è così senza cervello che mi fa male. Fisicamente. – Bombe