有没有一种新的Java8检索文件扩展名的方法?

有没有一种新的Java8检索文件扩展名的方法?,java,file,file-extension,Java,File,File Extension,到目前为止,我所做的是: String fileName = "file.date.txt"; String ext = fileName.substring(fileName.lastIndexOf('.') + 1); System.out.printf("'%s'%n", ext); // prints: 'txt' 在Java 8中有更方便的方法吗?不是Java 8,但您始终可以从apache Commons库中使用。:) 不,在JDK中没有比这更有效/方便的方法,但是许多库为您提供

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

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

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

在Java 8中有更方便的方法吗?

不是Java 8,但您始终可以从apache Commons库中使用。:)

不,在JDK中没有比这更有效/方便的方法,但是许多库为您提供了现成的方法,比如Guava:它将您的代码封装在一个方法中(带有附加验证)。

不,请参见

实际上,有一种新的方法可以考虑在Java 8中返回文件扩展名

其他答案中描述的大多数“旧”方法在没有扩展名时返回空字符串,但这避免了NullPointerException,但很容易忘记并非所有文件都有扩展名。通过返回,您可以提醒自己和其他人这一事实,还可以区分扩展名为空的文件名(末尾的点)和没有扩展名的文件(文件名中没有点)

public静态可选findExtension(字符串文件名){
int lastIndex=fileName.lastIndexOf('.');
如果(lastIndex==-1){
返回可选的.empty();
}
返回可选的.of(fileName.substring(lastIndex+1));
}

从Apache Commons IO使用
FilenameUtils.getExtension

例如:

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

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

希望这有助于..

对java.io resp所做的更改。这里总结了java.nio,如果这是一个答案,我希望它有更多的上下文:正如@Pshemo所提到的,文件扩展名的重要性往往被高估了。
子字符串
/
lastIndexOf
解决方案就足够了。Java无法为您提供获取路径名“文件扩展名”的明确方法,因为文件扩展名的概念是不可移植的。UNIX并没有真正拥有它们(您可以在文件叶名的末尾有一个<代码> ./COD>,但是O/S内核不考虑下面的内容是什么)。扩展是一种方便且非常常见的文件组织方式,被大量工具和应用程序使用,即使现代操作系统没有显式地处理它们。没有必要再写一遍。
String myString1 = FilenameUtils.getExtension("helloworld.exe"); // returns "exe"
String myString2 = FilenameUtils.getExtension("/home/abc/yey.xls"); // returns "xls"