Java 如何获取文件的文件扩展名?

新手上路,请多包涵

需要明确的是,我不是在寻找 MIME 类型。

假设我有以下输入: /path/to/file/foo.txt

我想要一种方法来分解此输入,特别是 .txt 用于扩展。在 Java 中有没有内置的方法可以做到这一点?我想避免编写自己的解析器。

原文由 longda 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 679
2 个回答

在这种情况下,使用 Apache Commons IO 中的 FilenameUtils.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>
  <groupId>commons-io</groupId>
  <artifactId>commons-io</artifactId>
  <version>2.6</version>
</dependency>

Gradle Groovy DSL

 implementation 'commons-io:commons-io:2.6'

Gradle 科特林 DSL

 implementation("commons-io:commons-io:2.6")

其他 https://search.maven.org/artifact/commons-io/commons-io/2.6/jar

原文由 Juan Rojas 发布,翻译遵循 CC BY-SA 4.0 许可协议

你真的需要一个“解析器”吗?

 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);
}

原文由 EboMike 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题