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 1/3] =?UTF-8?q?=E9=92=88=E5=AF=B9issue#I4W5FS@Gitee?= =?UTF-8?q?=E5=AD=98=E5=9C=A8=E5=85=B6=E4=BB=96=E7=89=B9=E6=AE=8A=E6=83=85?= =?UTF-8?q?=E5=86=B5=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 From 8f8abcd91846191b2983d057def0147cab5361f3 Mon Sep 17 00:00:00 2001 From: jiazhengquan <2466896229@qq.com> Date: Fri, 4 Mar 2022 11:39:58 +0800 Subject: [PATCH 2/3] =?UTF-8?q?=E9=92=88=E5=AF=B9issue#I4W5FS@Gitee?= =?UTF-8?q?=E5=AD=98=E5=9C=A8=E5=85=B6=E4=BB=96=E7=89=B9=E6=AE=8A=E6=83=85?= =?UTF-8?q?=E5=86=B5=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/cn/hutool/core/io/file/FileNameUtil.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 2d8ef52bb..e7f58b9a0 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 @@ -45,7 +45,7 @@ public class FileNameUtil { /** * 特殊后缀 */ - private static final CharSequence[] SPECIAL_SUFFIX = {"tar.bz2", "tar.Z", "tar.gz"}; + private static final CharSequence[] SPECIAL_SUFFIX = {"tar.bz2", "tar.Z", "tar.gz", ".tar.xz"}; // -------------------------------------------------------------------------------------------- name start From 8dae97d691431fe9884d1d6918295c633074b9b8 Mon Sep 17 00:00:00 2001 From: jiazhengquan <2466896229@qq.com> Date: Fri, 4 Mar 2022 14:25:32 +0800 Subject: [PATCH 3/3] =?UTF-8?q?=E9=92=88=E5=AF=B9issue#I4W5FS@Gitee?= =?UTF-8?q?=E5=AD=98=E5=9C=A8=E5=85=B6=E4=BB=96=E7=89=B9=E6=AE=8A=E6=83=85?= =?UTF-8?q?=E5=86=B5=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/cn/hutool/core/io/file/FileNameUtil.java | 2 +- hutool-core/src/test/java/cn/hutool/core/io/FileUtilTest.java | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) 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 e7f58b9a0..5670f4383 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 @@ -45,7 +45,7 @@ public class FileNameUtil { /** * 特殊后缀 */ - private static final CharSequence[] SPECIAL_SUFFIX = {"tar.bz2", "tar.Z", "tar.gz", ".tar.xz"}; + private static final CharSequence[] SPECIAL_SUFFIX = {"tar.bz2", "tar.Z", "tar.gz", "tar.xz"}; // -------------------------------------------------------------------------------------------- name start 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 448675705..8a50a7641 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 @@ -404,6 +404,10 @@ public class FileUtilTest { path = FileUtil.isWindows() ? "d:\\aaa\\bbb\\cc\\fff.tar.bz2" : "~/Desktop/hutool/fff.tar.bz2"; mainName = FileUtil.extName(path); Assert.assertEquals("tar.bz2", mainName); + + path = FileUtil.isWindows() ? "d:\\aaa\\bbb\\cc\\fff.tar.xz" : "~/Desktop/hutool/fff.tar.xz"; + mainName = FileUtil.extName(path); + Assert.assertEquals("tar.xz", mainName); } @Test