有没有一种新的Java 8方法可以检索文件扩展名?

21

到目前为止,我所做的是:

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

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

在Java 8中是否有更方便的方法?


3
文件扩展名的重要性经常被高估。使用 "substring"/"lastIndexOf" 方法即可满足需求。 - Holger
2
Java无法为您提供获取路径名的“文件扩展名”的明确方法,因为文件扩展名的概念不可移植。Unix实际上没有它们(您可以在文件叶名称的末尾附近有一个“。”,但操作系统内核不认为后面的内容是重要的)。 - Raedwald
4
扩展名是一种便利常用的文件组织方式,被广泛应用于许多工具和应用程序中,即使现代操作系统没有显式地处理它们。 - Nicola Musatti
5个回答

17

在JDK中目前没有更高效/便捷的方法来实现此功能,但是许多库(如Guava)都提供了已经准备好的方法,例如Files.getFileExtension(fileName),这个方法包装了你的代码,使其变成一个单一的方法(还带有额外的验证)。


13

7

2
Java.io和Java.nio所做的更改在此处概述:http://docs.oracle.com/javase/8/docs/technotes/guides/io/enhancements.html#jdk8 - mike
如果这是一个答案,我希望它有更多的上下文。像@Pshemo提到的那个会更好和有帮助。 - Syed Siraj Uddin

2
使用Apache Commons IO中的FilenameUtils.getExtension方法。
例如:
你可以提供文件的全路径名或仅文件名。
String myString1 = FilenameUtils.getExtension("helloworld.exe"); // returns "exe"
String myString2 = FilenameUtils.getExtension("/home/abc/yey.xls"); // returns "xls"

希望这能帮到你.. 最初的回答

11
这里有一篇近三年前提到过这个问题的回答。不需要再重复写一遍。 - Tom

2

实际上,在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));
}

Optional.of(fileName).filter(value -> value.contains(".")).map(value -> value.substring(value.lastIndexOf('.'))); - CedX
这个例子 /tmp/my.directory/test_file 怎么样? - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接