568 Stimmen

Wie kann ich die Dateierweiterung einer Datei in Java ermitteln?

Nur um das klarzustellen, ich suche nicht nach dem MIME-Typ.

Nehmen wir an, ich habe die folgende Eingabe: /path/to/file/foo.txt

Ich würde gerne eine Möglichkeit finden, diese Eingabe aufzuteilen, und zwar in .txt für die Verlängerung. Gibt es eine eingebaute Möglichkeit, dies in Java zu tun? Ich möchte vermeiden, meinen eigenen Parser zu schreiben.

741voto

Juan Rojas Punkte 8301

Verwenden Sie in diesem Fall DateinameUtils.getExtension von Apache Commons IO

Hier ist ein Beispiel für die Verwendung (Sie können entweder den vollständigen Pfad oder nur den Dateinamen angeben):

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-Abhängigkeit:

<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")

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

370voto

EboMike Punkte 74805

Braucht man dafür wirklich einen "Parser"?

String extension = "";

int i = fileName.lastIndexOf('.');
if (i > 0) {
    extension = fileName.substring(i+1);
}

Vorausgesetzt, Sie haben es mit einfachen Windows-ähnlichen Dateinamen zu tun und nicht mit etwas wie archive.tar.gz .

Übrigens, für den Fall, dass ein Verzeichnis zwar ein '.' hat, der Dateiname selbst aber nicht (wie /path/to.a/file ), können Sie Folgendes tun

String extension = "";

int i = fileName.lastIndexOf('.');
int p = Math.max(fileName.lastIndexOf('/'), fileName.lastIndexOf('\\'));

if (i > p) {
    extension = fileName.substring(i+1);
}

111voto

luke1985 Punkte 2245
private String getFileExtension(File file) {
    String name = file.getName();
    int lastIndexOf = name.lastIndexOf(".");
    if (lastIndexOf == -1) {
        return ""; // empty extension
    }
    return name.substring(lastIndexOf);
}

88voto

JeanValjean Punkte 16468

Wenn Sie Guave Bibliothek, können Sie sich an Files Hilfsklasse. Sie hat eine spezielle Methode, getFileExtension() . Zum Beispiel:

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

Darüber hinaus können Sie den Dateinamen auch mit einer ähnlichen Funktion ermitteln, getNameOhneErweiterung() :

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

27voto

intrepidis Punkte 2745

Wenn Sie Android verwenden, können Sie dies verwenden:

String ext = android.webkit.MimeTypeMap.getFileExtensionFromUrl(file.getName());

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X