到目前为止,我所做的是:
String fileName = "file.date.txt";
String ext = fileName.substring(fileName.lastIndexOf('.') + 1);
System.out.printf("'%s'%n", ext); // prints: 'txt'
在Java 8中是否有更方便的方法?
到目前为止,我所做的是:
String fileName = "file.date.txt";
String ext = fileName.substring(fileName.lastIndexOf('.') + 1);
System.out.printf("'%s'%n", ext); // prints: 'txt'
在Java 8中是否有更方便的方法?
在JDK中目前没有更高效/便捷的方法来实现此功能,但是许多库(如Guava)都提供了已经准备好的方法,例如Files.getFileExtension(fileName)
,这个方法包装了你的代码,使其变成一个单一的方法(还带有额外的验证)。
FilenameUtils.getExtension
方法。String myString1 = FilenameUtils.getExtension("helloworld.exe"); // returns "exe"
String myString2 = FilenameUtils.getExtension("/home/abc/yey.xls"); // returns "xls"
实际上,在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