boolean (final File file, final Collection<? super String> deletedPaths) { try { Files.walkFileTree(file.toPath(), EnumSet.of(FileVisitOption.FOLLOW_LINKS), Integer.MAX_VALUE, new SimpleFileVisitor<Path>() { @Override public FileVisitResult visitFile(Path f, BasicFileAttributes attrs) throws IOException { try { Files.delete(f); } catch (AccessDeniedException e) { if (!f.toFile().delete()) { // fallback throw e; } } deletedPaths.add(FileUtilRt.toSystemIndependentName(f.toString())); return FileVisitResult.CONTINUE; } @Override public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException { try { Files.delete(dir); } catch (AccessDeniedException e) { if (!dir.toFile().delete()) { // fallback throw e; } } return FileVisitResult.CONTINUE; } }); return true; } catch (IOException e) { return false; } }