diff --git a/CHANGELOG.md b/CHANGELOG.md index b55e2881a..0823b6f53 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -20,6 +20,7 @@ ### Bug修复 * 【core 】 修复NumberUtil.mul中null的结果错误问题(issue#I17Y4J@Gitee) * 【core 】 修复当金额大于等于1亿时,转换会多出一个万字的bug(pr#715@Github) +* 【core 】 修复FileUtil.listFileNames位于jar内导致的文件找不到问题(issue#listFileNames@Gitee) ------------------------------------------------------------------------------------------------------------- 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 8889d8bee..852ee8aa2 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 @@ -342,7 +342,8 @@ public class FileUtil { JarFile jarFile = null; try { jarFile = new JarFile(path.substring(0, index)); - return ZipUtil.listFileNames(jarFile, path.substring(index + 1)); + // 防止出现jar!/cn/hutool/这类路径导致文件找不到 + return ZipUtil.listFileNames(jarFile, StrUtil.removePrefix(path.substring(index + 1), "/")); } catch (IOException e) { throw new IORuntimeException(StrUtil.format("Can not read file path of [{}]", path), e); } finally { diff --git a/hutool-core/src/main/java/cn/hutool/core/util/ZipUtil.java b/hutool-core/src/main/java/cn/hutool/core/util/ZipUtil.java index dcb73750a..5f40a8892 100644 --- a/hutool-core/src/main/java/cn/hutool/core/util/ZipUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/util/ZipUtil.java @@ -1,5 +1,11 @@ package cn.hutool.core.util; +import cn.hutool.core.exceptions.UtilException; +import cn.hutool.core.io.FastByteArrayOutputStream; +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.io.IORuntimeException; +import cn.hutool.core.io.IoUtil; + import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; @@ -24,12 +30,6 @@ import java.util.zip.ZipFile; import java.util.zip.ZipInputStream; import java.util.zip.ZipOutputStream; -import cn.hutool.core.exceptions.UtilException; -import cn.hutool.core.io.FastByteArrayOutputStream; -import cn.hutool.core.io.FileUtil; -import cn.hutool.core.io.IORuntimeException; -import cn.hutool.core.io.IoUtil; - /** * 压缩工具类 * @@ -828,7 +828,7 @@ public class ZipUtil { * 获取Zip文件中指定目录下的所有文件,只显示文件,不显示目录 * * @param zipFile Zip文件 - * @param dir 目录前缀 + * @param dir 目录前缀(目录前缀不包含开头的/) * @return 文件列表 * @since 4.6.6 */ diff --git a/hutool-core/src/test/java/cn/hutool/core/io/FileUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/io/FileUtilTest.java index 561e64927..6154baab3 100644 --- a/hutool-core/src/test/java/cn/hutool/core/io/FileUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/io/FileUtilTest.java @@ -229,6 +229,15 @@ public class FileUtilTest { names = FileUtil.listFileNames("."); Assert.assertTrue(names.contains("hutool.jpg")); } + + @Test + @Ignore + public void listFileNamesInJarTest() { + List names = FileUtil.listFileNames("d:/test/hutool-core-5.1.0.jar!/cn/hutool/core/util "); + for (String name : names) { + Console.log(name); + } + } @Test @Ignore