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 7cf2d7b40..c2b6c818e 100755 --- 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 @@ -179,6 +179,14 @@ public class FileNameUtil { if (0 == len) { return fileName; } + + //issue#2642,多级扩展名的主文件名 + for (final CharSequence specialSuffix : SPECIAL_SUFFIX) { + if(StrUtil.endWith(fileName, "." + specialSuffix)){ + return StrUtil.subPre(fileName, len - specialSuffix.length() - 1); + } + } + if (CharUtil.isFileSeparator(fileName.charAt(len - 1))) { len--; } diff --git a/hutool-core/src/test/java/cn/hutool/core/io/file/FileNameUtilTest.java b/hutool-core/src/test/java/cn/hutool/core/io/file/FileNameUtilTest.java index 706cc4492..344ba754f 100755 --- a/hutool-core/src/test/java/cn/hutool/core/io/file/FileNameUtilTest.java +++ b/hutool-core/src/test/java/cn/hutool/core/io/file/FileNameUtilTest.java @@ -12,4 +12,10 @@ public class FileNameUtilTest { name = FileNameUtil.cleanInvalid("\r1\r\n2\n"); Assert.assertEquals("12", name); } + + @Test + public void mainNameTest() { + final String s = FileNameUtil.mainName("abc.tar.gz"); + Assert.assertEquals("abc", s); + } }