Attualmente sto cercando di eliminare ricorsivamente una directory ... Stranamente il pezzo più breve del codice sono stato in grado di trovare è il seguente costrutto, impiegando un ad hoc classe interna e in un modello visitatore ...java.nio: directory ricorsiva più concisa cancellare
Path rootPath = Paths.get("data/to-delete");
try {
Files.walkFileTree(rootPath, new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
System.out.println("delete file: " + file.toString());
Files.delete(file);
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
Files.delete(dir);
System.out.println("delete dir: " + dir.toString());
return FileVisitResult.CONTINUE;
}
});
} catch(IOException e){
e.printStackTrace();
}
Fonte: here
Questo si sente terribilmente goffo e prolisso, dato che le nuove API nio
rimuovere tanto disordine e boilerplate ...
C'è un modo più breve per ottenere una cancellazione di directory forzata e ricorsiva?
Sto cercando puri nativi Java 1.8 metodi, quindi si prega di non creare un collegamento a librerie esterne ...
* Questo si sente terribilmente goffo e verbose * Perché ? Questo è un ottimo modo per farlo. E Java 8 'Files.walk' non ti darà l'opportunità di farlo. – Tunaki
Perché questo costringe l'utente a ridefinire una semplice cancellazione ricorsiva ... Perché questo richiede 15 righe di codice ... Che ne dici di qualcosa come "Files.deleteRecursively (Path)", o forse qualche flag opzionale? – fgysin
La risposta è che semplicemente non esiste in NIO.2 integrato. Potresti avere un approccio ricorsivo con 'Files.list' ma è lo stesso e preferirei la soluzione che hai. – Tunaki