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

2022-08-31 04:19:17

为了清楚起见,我不是在寻找MIME类型。

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

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


答案 1

在这种情况下,请使用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


答案 2

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

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