FileVisitor
and then calling Files.walkFileTree
using the visitor. The visitor has four methods:
visitFile
: Invoked for a file in a directory.visitFileFailed
: Invoked for a file that could not be visited.preVisitDirectory
: Invoked for a directory before entries in the directory are visited.postVisitDirectory
: Invoked for a directory after entries in the directory, and all of their descendants, have been visited.
The following code shows how you can recursively delete a directory by walking the file tree. It does not follow symbolic links. I have overridden the
visitFile
and postVisitDirectory
methods in SimpleFileVisitor
so that when a file is visited, it is deleted and after all the files in the directory have been visited, the directory is deleted.
import java.io.IOException; import java.nio.file.FileVisitResult; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.nio.file.SimpleFileVisitor; import java.nio.file.attribute.BasicFileAttributes; import static java.nio.file.FileVisitResult.*; Path dir = Paths.get("/tmp/foo"); try { Files.walkFileTree(dir, new SimpleFileVisitor<Path>() { @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException { System.out.println("Deleting file: " + file); Files.delete(file); return CONTINUE; } @Override public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException { System.out.println("Deleting dir: " + dir); if (exc == null) { Files.delete(dir); return CONTINUE; } else { throw exc; } } }); } catch (IOException e) { e.printStackTrace(); }
thanks for the handy code
ReplyDelete