Вопрос-ответ

How do I get the file extension of a file in Java?

Как мне получить расширение файла в Java?

Просто для ясности, я не ищу тип MIME.

Допустим, у меня есть следующие входные данные: /path/to/file/foo.txt

Я хотел бы найти способ разбить этот ввод, в частности, на .txt для расширения. Есть ли какой-либо встроенный способ сделать это в Java? Я бы не хотел писать свой собственный анализатор.

Переведено автоматически
Ответ 1

В этом случае используйте FilenameUtils.getExtension из Apache Commons IO

Вот пример того, как это использовать (вы можете указать либо полный путь, либо просто имя файла):

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 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);
}
Ответ 3
private String getFileExtension(File file) {
String name = file.getName();
int lastIndexOf = name.lastIndexOf(".");
if (lastIndexOf == -1) {
return ""; // empty extension
}
return name.substring(lastIndexOf);
}
Ответ 4

Если вы используете библиотеку Guava, вы можете прибегнуть к Files служебному классу. У него есть определенный метод, getFileExtension(). Например:

String path = "c:/path/to/file/foo.txt";
String ext = Files.getFileExtension(path);
System.out.println(ext); //prints txt

Кроме того, вы также можете получить имя файла с помощью аналогичной функции, getNameWithoutExtension():

String filename = Files.getNameWithoutExtension(path);
System.out.println(filename); //prints foo
java file