From 919dbca570536a57df14f08a3a05604bcd3b45ec Mon Sep 17 00:00:00 2001 From: jiazhengquan <2466896229@qq.com> Date: Fri, 4 Mar 2022 11:13:39 +0800 Subject: [PATCH] =?UTF-8?q?=E9=92=88=E5=AF=B9issue#I4W5FS@Gitee=E5=AD=98?= =?UTF-8?q?=E5=9C=A8=E5=85=B6=E4=BB=96=E7=89=B9=E6=AE=8A=E6=83=85=E5=86=B5?= =?UTF-8?q?=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/cn/hutool/core/io/file/FileNameUtil.java | 11 +++++++++-- .../src/test/java/cn/hutool/core/io/FileUtilTest.java | 8 ++++++++ 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/hutool-core/src/main/java/cn/hutool/core/io/file/FileNameUtil.java b/hutool-core/src/main/java/cn/hutool/core/io/file/FileNameUtil.java index 07436e151..2d8ef52bb 100644 --- a/hutool-core/src/main/java/cn/hutool/core/io/file/FileNameUtil.java +++ b/hutool-core/src/main/java/cn/hutool/core/io/file/FileNameUtil.java @@ -42,6 +42,11 @@ public class FileNameUtil { */ private static final Pattern FILE_NAME_INVALID_PATTERN_WIN = Pattern.compile("[\\\\/:*?\"<>|]"); + /** + * 特殊后缀 + */ + private static final CharSequence[] SPECIAL_SUFFIX = {"tar.bz2", "tar.Z", "tar.gz"}; + // -------------------------------------------------------------------------------------------- name start @@ -223,8 +228,10 @@ public class FileNameUtil { return StrUtil.EMPTY; } else { // issue#I4W5FS@Gitee - if(fileName.endsWith("tar.gz")){ - return "tar.gz"; + int secondToLastIndex = fileName.substring(0, index).lastIndexOf(StrUtil.DOT); + String substr = fileName.substring(secondToLastIndex == -1 ? index : secondToLastIndex + 1); + if (StrUtil.containsAny(substr, SPECIAL_SUFFIX)) { + return substr; } String ext = fileName.substring(index + 1); 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 4e72c827f..448675705 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 @@ -396,6 +396,14 @@ public class FileUtilTest { path = FileUtil.isWindows() ? "d:\\aaa\\bbb\\cc\\fff.tar.gz" : "~/Desktop/hutool/fff.tar.gz"; mainName = FileUtil.extName(path); Assert.assertEquals("tar.gz", mainName); + + path = FileUtil.isWindows() ? "d:\\aaa\\bbb\\cc\\fff.tar.Z" : "~/Desktop/hutool/fff.tar.Z"; + mainName = FileUtil.extName(path); + Assert.assertEquals("tar.Z", mainName); + + path = FileUtil.isWindows() ? "d:\\aaa\\bbb\\cc\\fff.tar.bz2" : "~/Desktop/hutool/fff.tar.bz2"; + mainName = FileUtil.extName(path); + Assert.assertEquals("tar.bz2", mainName); } @Test