【问题标题】:Is there a new Java 8 way of retrieving the file extension?是否有一种新的 Java 8 检索文件扩展名的方法?
【发布时间】:2015-06-18 11:13:34
【问题描述】:

到目前为止我所做的如下:

String fileName = "file.date.txt";
String ext = fileName.substring(fileName.lastIndexOf('.') + 1);

System.out.printf("'%s'%n", ext); // prints: 'txt'

Java 8 中有没有更方便的方法?

【问题讨论】:

  • 文件扩展名的重要性经常被高估。 substring/lastIndexOf 解决方案就足够了。
  • Java 无法为您提供获取路径名的“文件扩展名”的显式方法,因为文件扩展名的概念是不可移植的。 Unix 并没有真正拥有它们(您可以在文件叶子名称的末尾附近有一个 .,但 O/S 内核不认为后面的内容很重要)。
  • 嗯。扩展是一种方便且非常常见的文件组织方式,被大量工具和应用程序使用,即使现代操作系统没有明确处理它们。

标签: java file file-extension


【解决方案1】:

在 JDK 中没有更高效/更方便的方法,但许多库为此提供了现成的方法,例如 Guava:Files.getFileExtension(fileName),它将您的代码包装在单一方法中(带有额外的验证)。

【讨论】:

    【解决方案2】:

    不是 Java8,但您始终可以使用 apache Commons 库中的 FilenameUtils.getExtension()。 :)

    【讨论】:

      【解决方案3】:

      【讨论】:

      【解决方案4】:

      其实一种在Java 8中返回文件扩展名的新思路。

      如果没有扩展名,其他答案中描述的大多数“旧”方法都会返回一个空字符串,但这虽然避免了 NullPointerExceptions,但很容易忘记并非所有文件都有扩展名。通过返回Optional,您可以提醒自己和他人注意这一事实,并且您还可以区分带空扩展名的文件名(末尾的点)和不带扩展名的文件(文件名中没有点)

      public static Optional<String> findExtension(String fileName) {
          int lastIndex = fileName.lastIndexOf('.');
          if (lastIndex == -1) {
              return Optional.empty();
          }
          return Optional.of(fileName.substring(lastIndex + 1));
      }
      

      【讨论】:

        【解决方案5】:

        使用来自 Apache Commons IO

        FilenameUtils.getExtension

        例子:

        您可以提供完整路径名仅提供文件名

        String myString1 = FilenameUtils.getExtension("helloworld.exe"); // returns "exe"
        String myString2 = FilenameUtils.getExtension("/home/abc/yey.xls"); // returns "xls"
        

        希望这会有所帮助..

        【讨论】:

        • 有一个将近三年的答案提到了这一点。不用再写了。
        猜你喜欢
        • 2013-07-18
        • 2016-02-04
        • 2016-06-28
        • 1970-01-01
        • 2021-12-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-27
        相关资源
        最近更新 更多