Java文件处理传统的API是
java.io.File
这是一个在Java早起就一直有的API。
从Java7开始,Java引入了另一套新的API来处理文件。
java.nio.file.Files;
java.nio.file.Path;
java.nio.file.Paths;
但无论是File的删除方法
File.delete();
还是Files的删除方法
Files.delete(path);
都只能用于删除文件或空目录,如果目录不为空则会抛出异常。
为了实现非空目录的删除,需要遍历目录先删除文件,再删除空目录。
基于File的方法:
通过递归调用实现目录遍历
import java.io.File;
public static void recursiveDelete(File file) {
//to end the recursive loop
if (!file.exists())
return;
//if directory, go inside and call recursively
if (file.isDirectory()) {
for (File f : file.listFiles()) {
//call recursively
recursiveDelete(f);
}
}
//call delete to delete files and empty directory
file.delete();
System.out.println("Deleted file/folder: "+file.getAbsolutePath());
}
基于Files的方法:
使用walkFileTree方法可以方便的实现目录遍历
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.SimpleFileVisitor;
private static class TempFileCleaner extends SimpleFileVisitor<Path> {
@Override
public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
Files.deleteIfExists(dir);
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
Files.deleteIfExists(file);
return FileVisitResult.CONTINUE;
}
}
Files.walkFileTree(dir, new TempFileCleaner());
本文介绍了在Java中如何删除非空目录。传统的API如File.delete()在遇到非空目录时会抛出异常。从Java 7开始,新增的Files类提供了更强大的功能。通过递归调用或者使用Files.walk()方法,可以方便地删除整个目录及其包含的文件。

2145

被折叠的 条评论
为什么被折叠?



