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.

19voto

yavuzkavus Punkte 1258

Dies ist eine bewährte Methode

public static String getExtension(String fileName) {
    char ch;
    int len;
    if(fileName==null || 
            (len = fileName.length())==0 || 
            (ch = fileName.charAt(len-1))=='/' || ch=='\\' || //in the case of a directory
             ch=='.' ) //in the case of . or ..
        return "";
    int dotInd = fileName.lastIndexOf('.'),
        sepInd = Math.max(fileName.lastIndexOf('/'), fileName.lastIndexOf('\\'));
    if( dotInd<=sepInd )
        return "";
    else
        return fileName.substring(dotInd+1).toLowerCase();
}

Und Testfall:

@Test
public void testGetExtension() {
    assertEquals("", getExtension("C"));
    assertEquals("ext", getExtension("C.ext"));
    assertEquals("ext", getExtension("A/B/C.ext"));
    assertEquals("", getExtension("A/B/C.ext/"));
    assertEquals("", getExtension("A/B/C.ext/.."));
    assertEquals("bin", getExtension("A/B/C.bin"));
    assertEquals("hidden", getExtension(".hidden"));
    assertEquals("dsstore", getExtension("/user/home/.dsstore"));
    assertEquals("", getExtension(".strange."));
    assertEquals("3", getExtension("1.2.3"));
    assertEquals("exe", getExtension("C:\\Program Files (x86)\\java\\bin\\javaw.exe"));
}

18voto

Yiao SUN Punkte 818

Wenn Sie in Ihrem Projekt das Spring-Framework verwenden, dann können Sie StringUtils

import org.springframework.util.StringUtils;

StringUtils.getFilenameExtension("YourFileName")

16voto

VelocityPulse Punkte 567
String path = "/Users/test/test.txt";
String extension = "";

if (path.contains("."))
     extension = path.substring(path.lastIndexOf("."));

return ".txt"

wenn Sie nur "txt" wollen, machen Sie path.lastIndexOf(".") + 1

16voto

Sylvain Leroux Punkte 47483

Um Dateinamen ohne Zeichen zu berücksichtigen vor der Punkt, müssen Sie diese leichte Abweichung von der akzeptierten Antwort verwenden:

String extension = "";

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

"file.doc" => "doc"
"file.doc.gz" => "gz"
".doc" => "doc"

12voto

Ebrahim Byagowi Punkte 8964

Meine schmutzige und winzige Verwendung String.replaceAll :

.replaceAll("^.*\\.(.*)$", "$1")

Beachten Sie, dass zunächst * ist gierig, d. h. es werden so viele Zeichen wie möglich erfasst, bis nur noch der letzte Punkt und die Dateierweiterung übrig bleiben.

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