В настоящее время я пытаюсь рекурсивно удалить каталог ... Как ни странно, самым коротким фрагментом кода, который я смог найти, является следующая конструкция, в которой используется ad-hoc внутренний класс и в шаблоне посетителя ...Java.nio: кратчайший рекурсивный каталог delete
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();
}
Источник: here
Это чувствует себя ужасно неуклюжим и многословным, учитывая, что новые nio
API для удаления так много беспорядка и шаблонного ...
Есть ли более короткий способ достижения принудительной, рекурсивной каталогов удалить?
Я ищу чисто нативные методы Java 1.8, поэтому, пожалуйста, не используйте ссылку на внешние библиотеки ...
* Это чувствует себя ужасно неуклюжим и многословным * Почему ? Это очень хороший способ сделать это. И Java 8 'Files.walk' не даст вам возможности сделать это. – Tunaki
Потому что это заставляет пользователя перерисовать простое рекурсивное удаление ... Потому что для этого нужны 15 строк кода ... Как насчет чего-то типа 'Files.deleteRecursively (Path)' или, возможно, какой-то необязательный флаг? – fgysin
Ответ заключается в том, что он просто не существует во встроенном NIO.2. У вас может быть рекурсивный подход с 'Files.list', но это то же самое, и я бы предпочел решение, которое у вас есть. – Tunaki