我需要从文件名中提取扩展名。
我知道可以使用.gz
或使用Apache commons-io中的.tar
等实用程序方法对filePath.lastIndexOf('.')
或FilenameUtils.getExtension(filePath)
等单个扩展进行此操作。
但是,如果我的文件扩展名为.tar.gz
,该怎么办?如何管理包含.
个字符的扩展名的文件?
答案 0 :(得分:4)
如果您知道哪些扩展程序很重要,您可以直接检查它们。您将拥有一系列已知扩展,如下所示:
List<String> EXTS = Arrays.asList("tar.gz", "tgz", "gz", "zip");
您可以获得(第一个)最长匹配扩展名,如下所示:
String getExtension(String fileName) {
String found = null;
for (String ext : EXTS) {
if (fileName.endsWith("." + ext)) {
if (found == null || found.length() < ext.length()) {
found = ext;
}
}
}
return found;
}
因此调用getExtension("file.tar.gz")
会返回"tar.gz"
。
如果您有混合大小写的名称,可以尝试将检查更改为循环内的filename.toLowerCase().endsWith("." + ext)
。
答案 1 :(得分:2)
文件只能有一个扩展名!
如果您有文件test.tar.gz
,
.gz
是扩展名test.tar
是基本名称! .tar
是基本名称的一部分,而不是扩展名的一部分!
如果您希望将文件编码为tar
和gz
,则应将其称为.tgz
。要使用.tar.gz
是不好的做法,如果您需要处理这些文件,则应该采取一种解决方法,例如将文件重命名为test.tgz
。
答案 2 :(得分:0)
substring
仅获取文件名,indexOf
代替lastIndexOf
获取第一个'。'之后的扩展
答案 3 :(得分:0)
您可以获取路径的文件名部分,在.
上拆分,并将数组中的最后0,1或2个元素作为扩展名。
当然,如果.tar.*
(gz,bz2等)是您唯一的优势,那么构建一个过滤.tar文件名的解决方案可能会很实用。并使用它作为提取扩展名的点(包括.tar部分)。