6

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

我知道这可以通过使用.gz或使用像Apache commons-io 这样的实用程序方法来完成。.tarfilePath.lastIndexOf('.')FilenameUtils.getExtension(filePath)

但是,如果我有一个带有类似扩展名的文件.tar.gz怎么办?如何管理扩展名包含.字符的文件?

4

4 回答 4

5

如果您知道哪些扩展很重要,您可以简单地明确检查它们。您将拥有一组已知扩展,如下所示:

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)循环内部。

于 2013-07-16T13:58:33.263 回答
3

一个文件只能有一个扩展名!

如果你有一个文件test.tar.gz

  • .gz是扩展和
  • test.tar是基本名称!

.tar在这种情况下是基本名称的一部分,而不是扩展名的一部分!

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

于 2013-07-16T12:49:31.407 回答
0

找到了一个简单的方法。用于substring仅获取文件名,indexOf而不是lastIndexOf获取第一个 '.' 并在其后扩展

于 2013-07-16T12:36:14.607 回答
0

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

当然,如果.tar.*(gz、bz2 等)是您唯一的极端情况,那么构建一个过滤 .tar 文件名的解决方案可能是务实的。并将其用作提取扩展名的点(包括 .tar 部分)。

于 2013-07-16T12:37:11.127 回答