如果您正在使用Java swing应用程序/桌面应用程序,则有时可能需要从文件系统中删除其中包含所有内部目录和文件的目录。 您可以在下面的代码示例中直接删除目录以及其中的所有包含文件的目录。
它分两步递归工作:
首先删除目录中的所有文件。 然后
它删除目录本身
Using java.nio.file.Files [Java 7]package example;
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;
public class DeleteDirectoryNIO
{
public static void main(String[] args)
{
Path dir = Paths.get("c:/temp/innerDir");
try
{
Files.walkFileTree(dir, new SimpleFileVisitor()
{
@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;
}
}
});
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
Output:
Deleting file: c:\temp\innerDir\data.txt
Deleting file: c:\temp\innerDir\logging.log
Deleting file: c:\temp\innerDir\test.png
Deleting file: c:\temp\innerDir\test.txt
Deleting dir: c:\temp\innerDir
Using java.nio.file.Files [Java 8]
从Java 8开始,您可以将Java NIO操作与Java流结合使用,上述方法变得非常简洁。public class DeleteDirectoryNIOWithStream
{
public static void main(String[] args)
{
Path dir = Paths.get("c:/temp/innerDir");
Files.walk(dir)
.sorted(Comparator.reverseOrder())
.map(Path::toFile)
.forEach(File::delete);
}
}
在这里, Files.walk()返回表示目录本身之前目录(即文件)内容的路径流。 此后,它将“ Path映射到“ File并删除每个文件。 现在,您可以使用delete()方法删除文件本身。
Using commons-io
Apache commons IO模块具有FileUtils类。 它的deleteDirectory( file )方法可用于删除目录以及其中的所有子目录和文件。import org.apache.commons.io.FileUtils;
import java.io.File;
public class DeleteDirectoryCommonsIO
{
public static void main(String[] args)
{
File file = FileUtils.getFile("c:/temp/innerDir");
FileUtils.deleteDirectory( file );
}
}
每当您要删除其中包含所有文件的目录时,请使用上面的便捷代码示例。