Java如何递归删除目录

IT 文章2年前 (2023)发布 小编
0 0 0

学习使用Java IO、New IO和Commons IO类来删除目录以及其中的所有子目录和文件。

1.使用Apache Commons IO中的FileUtils.deleteDirectory()

将Commons IO模块包含在项目中,使用Maven依赖项。

Dependency<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.11.0</version>
</dependency>

Commons IO模块具有FileUtils类。其deleteDirectory(dir)方法可以用于删除一个目录以及其中的所有子目录和文件。

ad

程序员导航

优网导航旗下整合全网优质开发资源,一站式IT编程学习与工具大全网站

如果由于任何原因删除失败,此方法将抛出IOException。

//删除一个目录、子目录及其中的所有文件
File file = FileUtils.getFile("c:/temp/innerDir");
FileUtils.deleteDirectory( file );

请使用另一个方法deleteQuitly(dir)以安静地删除。此方法从不抛出异常,它返回true如果目录被删除,否则返回false。

File file = FileUtils.getFile("c:/temp/innerDir");
boolean isDeleted = FileUtils.deleteQuietly( file );

2. 使用Java NIO中的Files.delete()

Java文档中的另一种方法是使用Files.walkFileTree()来迭代给定目录中的所有子目录和文件,并逐个删除它们。

它递归地工作分两步:

ad

AI 工具导航

优网导航旗下AI工具导航,精选全球千款优质 AI 工具集

  • 首先,它首先删除目录中的所有文件
  • 然后它删除目录本身

这个Java示例使用Files.walkFileTree()方法和SimpleFileVisitor来执行删除操作。

// 递归删除一个目录
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&lt;Path&gt;()
			{
			      @Override
			      public FileVisitResult visitFile(Path file, BasicFileAttributes attrs)
			    		  throws IOException
			      {
			          System.out.println("Deleting the file: " + file);
			          Files.delete(file);
			          return FileVisitResult.CONTINUE;
			      }
			      @Override
			      public FileVisitResult postVisitDirectory(Path dir,
			              IOException exc) throws IOException
			      {
			          System.out.println("Deleting the dir: " + dir);
			          if (exc == null) {
			              Files.delete(dir);
			              return FileVisitResult.CONTINUE;
			          } else {
			              throw exc;
			          }
				   }
				});
		}
		catch (IOException e)
		{
		  e.printStackTrace();
		}
	}
}

3.Java 8中删除目录的方法

自Java 8以来,我们可以将Java NIO操作与Java流结合起来,上述方法变得更加简洁。

// Java 8递归删除目录
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()返回一个路径流,表示目录内容(即文件),先于目录本身。然后它将路径映射为文件并删除每个文件。现在您可以使用delete()方法删除文件本身。

© 版权声明

相关文章

暂无评论

暂无评论...