From d52c32154afc9b20fd7cc590dc80ec97c9e6d369 Mon Sep 17 00:00:00 2001 From: Looly Date: Fri, 20 Aug 2021 16:30:31 +0800 Subject: [PATCH] fix code --- .../src/main/java/cn/hutool/core/io/FileUtil.java | 10 ++++++---- .../src/main/java/cn/hutool/core/io/file/PathUtil.java | 2 +- .../cn/hutool/core/io/file/visitor/DelVisitor.java | 9 +++++++++ 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/hutool-core/src/main/java/cn/hutool/core/io/FileUtil.java b/hutool-core/src/main/java/cn/hutool/core/io/FileUtil.java index d36c60eec..5437041dc 100644 --- a/hutool-core/src/main/java/cn/hutool/core/io/FileUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/io/FileUtil.java @@ -709,8 +709,12 @@ public class FileUtil extends PathUtil { } // 删除文件或清空后的目录 + final Path path = file.toPath(); try { - delFile(file.toPath()); + delFile(path); + } catch (DirectoryNotEmptyException e){ + // 遍历清空目录没有成功,此时补充删除一次(可能存在部分软链) + del(path); } catch (IOException e) { throw new IORuntimeException(e); } @@ -749,10 +753,8 @@ public class FileUtil extends PathUtil { final File[] files = directory.listFiles(); if (null != files) { - boolean isOk; for (File childFile : files) { - isOk = del(childFile); - if (isOk == false) { + if(false == del(childFile)){ // 删除一个出错则本次删除任务失败 return false; } diff --git a/hutool-core/src/main/java/cn/hutool/core/io/file/PathUtil.java b/hutool-core/src/main/java/cn/hutool/core/io/file/PathUtil.java index c0ed49a2f..0187e7fab 100644 --- a/hutool-core/src/main/java/cn/hutool/core/io/file/PathUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/io/file/PathUtil.java @@ -644,7 +644,7 @@ public class PathUtil { } /** - * 删除文件,不追踪软链 + * 删除文件或空目录,不追踪软链 * * @param path 文件对象 * @throws IOException IO异常 diff --git a/hutool-core/src/main/java/cn/hutool/core/io/file/visitor/DelVisitor.java b/hutool-core/src/main/java/cn/hutool/core/io/file/visitor/DelVisitor.java index aabbd703e..4e435fbec 100644 --- a/hutool-core/src/main/java/cn/hutool/core/io/file/visitor/DelVisitor.java +++ b/hutool-core/src/main/java/cn/hutool/core/io/file/visitor/DelVisitor.java @@ -23,6 +23,15 @@ public class DelVisitor extends SimpleFileVisitor { return FileVisitResult.CONTINUE; } + /** + * 访问目录结束后删除目录,当执行此方法时,子文件或目录都已访问(删除)完毕
+ * 理论上当执行到此方法时,目录下已经被清空了 + * + * @param dir 目录 + * @param e 异常 + * @return {@link FileVisitResult} + * @throws IOException IO异常 + */ @Override public FileVisitResult postVisitDirectory(Path dir, IOException e) throws IOException { if (e == null) {