获取tar.gz等特殊情况的文件扩展名

时间:2013-07-16 12:30:10

标签: java file utility-method

我需要从文件名中提取扩展名。

我知道可以使用.gz或使用Apache commons-io中的.tar等实用程序方法对filePath.lastIndexOf('.')FilenameUtils.getExtension(filePath)等单个扩展进行此操作。

但是,如果我的文件扩展名为.tar.gz,该怎么办?如何管理包含.个字符的扩展名的文件?

4 个答案:

答案 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是基本名称的一部分,而不是扩展名的一部分!

如果您希望将文件编码为targz,则应将其称为.tgz。要使用.tar.gz是不好的做法,如果您需要处理这些文件,则应该采取一种解决方法,例如将文件重命名为test.tgz

答案 2 :(得分:0)

找到一个简单的方法。使用substring仅获取文件名,indexOf代替lastIndexOf获取第一个'。'之后的扩展

答案 3 :(得分:0)

您可以获取路径的文件名部分,在.上拆分,并将数组中的最后0,1或2个元素作为扩展名。

当然,如果.tar.*(gz,bz2等)是您唯一的优势,那么构建一个过滤.tar文件名的解决方案可能会很实用。并使用它作为提取扩展名的点(包括.tar部分)。