在这篇简短的文章中,您将学习如何递归删除目录及其所有子目录和文件。
有两个示例演示了如何完成此任务。 这两个示例背后的想法是遍历文件树,并在删除目录本身之前删除任何目录中的文件。
此示例使用 Files.walk(Path)
方法,该方法通过按深度优先顺序遍历文件树来返回填充有 Path 对象的 Stream<Path>
。
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Comparator;
public class DeleteDirectoryRecursively {
public static void main(String[] args) throws IOException {
Path dir = Paths.get("java");
// Traverse the file tree in depth-first fashion and delete each file/directory.
Files.walk(dir)
.sorted(Comparator.reverseOrder())
.forEach(path -> {
try {
System.out.println("Deleting: " + path);
Files.delete(path);
} catch (IOException e) {
e.printStackTrace();
}
});
}
}
以下示例使用 Files.walkFileTree(Path, FileVisitor)
方法遍历文件树并为每个文件调用提供的 FileVisitor
。
我们使用 SimpleFileVisitor
来执行删除操作。
import java.io.IOException;
import java.nio.file.*;
import java.nio.file.attribute.BasicFileAttributes;
public class DeleteDirectoryRecursively1 {
public static void main(String[] args) throws IOException {
Path dir = Paths.get("java");
// Traverse the file tree and delete each file/directory.
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 FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
System.out.println("Deleting dir: " + dir);
if (exc == null) {
Files.delete(dir);
return FileVisitResult.CONTINUE;
} else {
throw exc;
}
}
});
}
}
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://www.callicoder.com/java-delete-directory-recursively-with-subdirectories-files/
内容来源于网络,如有侵权,请联系作者删除!