如何在 Java 中递归删除目录及其所有子目录和文件

x33g5p2x  于2021-10-16 转载在 Java  
字(1.5k)|赞(0)|评价(0)|浏览(824)

在这篇简短的文章中,您将学习如何递归删除目录及其所有子目录和文件。

有两个示例演示了如何完成此任务。 这两个示例背后的想法是遍历文件树,并在删除目录本身之前删除任何目录中的文件。

递归删除目录 - Java 8+

此示例使用 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();
                    }
                });
    }
}

递归删除目录 - Java 7

以下示例使用 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;
                }
            }
        });
    }
}

相关文章

微信公众号

最新文章

更多