我需要从文件名中提取扩展名。
我知道这可以通过使用.gz
或使用像Apache commons-io 这样的实用程序方法来完成。.tar
filePath.lastIndexOf('.')
FilenameUtils.getExtension(filePath)
但是,如果我有一个带有类似扩展名的文件.tar.gz
怎么办?如何管理扩展名包含.
字符的文件?
我需要从文件名中提取扩展名。
我知道这可以通过使用.gz
或使用像Apache commons-io 这样的实用程序方法来完成。.tar
filePath.lastIndexOf('.')
FilenameUtils.getExtension(filePath)
但是,如果我有一个带有类似扩展名的文件.tar.gz
怎么办?如何管理扩展名包含.
字符的文件?
如果您知道哪些扩展很重要,您可以简单地明确检查它们。您将拥有一组已知扩展,如下所示:
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)
循环内部。
一个文件只能有一个扩展名!
如果你有一个文件test.tar.gz
,
.gz
是扩展和test.tar
是基本名称!.tar
在这种情况下是基本名称的一部分,而不是扩展名的一部分!
如果您喜欢将文件编码为tar
,gz
则应将其命名为.tgz
. 使用 a.tar.gz
是不好的做法,如果您需要处理这些文件,您应该采取一种解决方法,例如将文件重命名为test.tgz
.
找到了一个简单的方法。用于substring
仅获取文件名,indexOf
而不是lastIndexOf
获取第一个 '.' 并在其后扩展
您可以获取路径的文件名部分,拆分.
并将数组中的最后 0、1 或 2 个元素作为扩展名。
当然,如果.tar.*
(gz、bz2 等)是您唯一的极端情况,那么构建一个过滤 .tar 文件名的解决方案可能是务实的。并将其用作提取扩展名的点(包括 .tar 部分)。