跳到主要內容

範例 - Java NIO2 API 刪除完整目錄

Java 7 後建議使用 NIO2 API 處理目錄相關操作
新的 API 實作相對過去的方式有一些好處

1. 更好的效能
2. 能處理 symbolic link 等非實體存在的目錄、檔案
3. 搭配 Java 8 開始的 Stream API 能有更方便的寫法

寫法如下:

Path zippedPath = Paths.get(file.getAbsolutePath());
try {
    Files.walkFileTree(walkedPath, new FileVisitor<Path>() {
        @Override
        public FileVisitResult preVisitDirectory(Path dir,
                                                 BasicFileAttributes attrs) throws IOException {
            return FileVisitResult.CONTINUE;
        }

        @Override
        public FileVisitResult postVisitDirectory(Path directory, IOException ioe)
                throws IOException {
            Files.delete(directory);
            return FileVisitResult.CONTINUE;
        }

        @Override
        public FileVisitResult visitFile(Path file, BasicFileAttributes attributes)
                throws IOException {
            Files.delete(file);
            return FileVisitResult.CONTINUE;
        }

        @Override
        public FileVisitResult visitFileFailed(Path file, IOException ioe)
                throws IOException {
            return FileVisitResult.CONTINUE;
        }
    });
} catch (IOException e) {
    System.out.print(e);
}

如果需要處理的只有部分狀況,可以使用 SimpleFileVisitor 取代 FileVisitor
這樣可以少寫一些override的code

留言