如何在Java中获取文件的文件扩展名?
为了清楚起见,我不是在寻找MIME类型。
假设我有以下输入:/path/to/file/foo.txt
我想要一种方法来分解此输入,特别是对于扩展。在Java中是否有任何内置的方法可以做到这一点?我想避免编写自己的解析器。.txt
为了清楚起见,我不是在寻找MIME类型。
假设我有以下输入:/path/to/file/foo.txt
我想要一种方法来分解此输入,特别是对于扩展。在Java中是否有任何内置的方法可以做到这一点?我想避免编写自己的解析器。.txt
在这种情况下,请使用Apache Commons IO中的文件名Utils.getExtension。
以下是如何使用它的示例(您可以指定完整路径或仅指定文件名):
import org.apache.commons.io.FilenameUtils;
// ...
String ext1 = FilenameUtils.getExtension("/path/to/file/foo.txt"); // returns "txt"
String ext2 = FilenameUtils.getExtension("bar.exe"); // returns "exe"
Maven dependency:
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.6</version>
</dependency>
Gradle Groovy DSL
implementation 'commons-io:commons-io:2.6'
Gradle Kotlin DSL
implementation("commons-io:commons-io:2.6")
其他 https://search.maven.org/artifact/commons-io/commons-io/2.6/jar
你真的需要一个“解析器”吗?
String extension = "";
int i = fileName.lastIndexOf('.');
if (i > 0) {
extension = fileName.substring(i+1);
}
假设您正在处理简单的类似Windows的文件名,而不是类似.archive.tar.gz
顺便说一句,对于目录可能有“.”,但文件名本身没有(如)的情况,你可以做/path/to.a/file
String extension = "";
int i = fileName.lastIndexOf('.');
int p = Math.max(fileName.lastIndexOf('/'), fileName.lastIndexOf('\\'));
if (i > p) {
extension = fileName.substring(i+1);
}