我需要从文件名中提取扩展名。
对于单个扩展名如.gz
或.tar
,可以使用filePath.lastIndexOf('.')
或使用Apache Commons-IO的实用程序方法FilenameUtils.getExtension(filePath)
来完成。
但是,如果我有一个具有像.tar.gz
这样的扩展名的文件呢? 如何管理包含.
字符的扩展名的文件?
我需要从文件名中提取扩展名。
对于单个扩展名如.gz
或.tar
,可以使用filePath.lastIndexOf('.')
或使用Apache Commons-IO的实用程序方法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
是文件名(也称为Basename)!在这种情况下,.tar
是文件名的一部分,而不是扩展名的一部分!
如果您想将文件编码为tar
和gz
,则应将其命名为.tgz
。 使用.tar.gz
是不好的做法,如果您需要处理这些文件,则应该采用解决方法,例如将文件重命名为test.tgz
。
foo.tar.gz
变为61822326-ef4d-49f4-971d-b20269c72db9.gz
... - Enercciosubstring
来获取文件名,使用 indexOf
而不是 lastIndexOf
来获取第一个 '.' 和其后面的扩展名。program.logs.tar.gz
的文件,你的程序会认为它的扩展名是什么? - Thorsten Dittmar你可以获取路径中的文件名部分,以 .
为分隔符拆分,并将数组中的最后0、1或2个元素视为扩展名。
当然,如果 .tar.*
(gz、bz2等)是您唯一需要考虑的情况,那么构建一个过滤掉文件名中. tar的解决方案并将其用作提取扩展名的点(包括.tar部分)可能是实用的。
.tar.gz
。按照定义,扩展名是.gz
。.tar
只是为了提供信息。如果文件以.test.zip
结尾,您会认为扩展名是.zip
,对吗? - Thorsten Dittmarcommons-io-2.4.jar
,你会期望发生什么? - vels4j