So erhalten Sie die Dateierweiterung einer Datei in Java

So erhalten Sie die Dateierweiterung einer Datei in Java

1. Überblick

In diesem kurzen Tutorial zeigen wir, wie Sie die Dateierweiterung programmgesteuert in Java erhalten. We’ll focus on three major approaches to the problem.

In unseren Implementierungen werden die Zeichen nach den letzten.'zurückgegeben.

Wenn unser Dateiname daher als schnelles Beispieljarvis.txt lautet, werden dieStringtxt” als Dateierweiterung zurückgegeben.

2. Dateierweiterung abrufen

Für jeden Ansatz lernen wir, wie er implementiert wird, und verfolgen, was in zwei Sonderfällen passiert:

  • Wenn ein Dateiname keine Erweiterungen hat, z. B. einemakefile-Datei

  • und wenn ein Dateiname nur aus der Erweiterung besteht, z. B..gitignore oder.DS_Store.

2.1. EinfacherString Handhabungsansatz

Bei diesem Ansatz verwenden wir einen einfachenString-Handhabungsansatz, um die Erweiterung zu finden:

public Optional getExtensionByStringHandling(String filename) {
    return Optional.ofNullable(filename)
      .filter(f -> f.contains("."))
      .map(f -> f.substring(filename.lastIndexOf(".") + 1));
}

Diese Methode sucht nach dem Punkt "." Vorkommen im angegebenen Dateinamen.

Wenn es existiert, findet es die letzte Position des Punktes '.' und geben Sie die Zeichen danach und die Zeichen nach dem letzten Punkt "." bekannt als die Dateierweiterung.

Sonderfälle:

  1. No extension - Diese Methode gibt ein leeresString zurück

  2. Only extension - Diese Methode gibtString nach dem Punkt zurück, z. “gitignore”

2.2. FilenameUtils.getExtension von Apache Commons IO

Im zweiten Ansatz finden wir die Erweiterung mithilfe einer Dienstprogrammklasse, die von der Apache Commons IO-Bibliothek bereitgestellt wird:

public String getExtensionByApacheCommonLib(String filename) {
    return FilenameUtils.getExtension(filename);
}

Hier können wir anstelle des Dateinamens auch den vollständigen Pfad zu einer Dateie.g.C:/example/com/demo.java“ angeben.

Die MethodegetExtension(String) prüft, ob das angegebenefilename leer ist oder nicht.

Wennfilename leer oder null ist, gibtgetExtension(String filename) die angegebene Instanz zurück. Andernfalls wird die Erweiterung des Dateinamens zurückgegeben.

Dazu wird die MethodeindexOfExtension(String) verwendet, die wiederumlastIndexof(char) verwendet, um das letzte Vorkommen des '.' Zu ermitteln. Diese Methoden werden beide durchFilenameUtils bereitgestellt.

Diese Methode überprüft auch, ob nach dem letzten Punkt kein Verzeichnistrennzeichen mehr vorhanden ist, indem eine andere MethodeindexOfLastSeparator(String),verwendet wird, die eine Datei im Unix- oder Windows-Format verarbeitet.

Sonderfälle:

  1. No extension - Diese Methode gibt eine leere Zeichenfolge zurück.

  2. Only extension - Diese Methode gibtString nach dem Punkt zurück, z. “gitignore”

2.3. Verwenden der Guavenbibliothek

In diesem letzten Ansatz verwenden wir die Guava-Bibliothek, um die Erweiterung zu finden.

Um eine Guava-Bibliothek hinzuzufügen, können wir unserenpom.xml: die folgende Abhängigkeit hinzufügen


    com.google.guava
    guava
    24.1.1-jre

Für die neueste Abhängigkeit können wirMaven Central überprüfen.

Nach dem Hinzufügen der Bibliothek können wir einfach diegetFileExtension-Methode verwenden:

public String getExtensionByGuava(String filename) {
    return Files.getFileExtension(filename);
}

Die MethodegetFileExtension(String) prüft zunächst, ob die angegebenenfilename leer sind.

Wennfilename nicht leer ist, wird eineFile-Instanz erstellt, indem die angegebenenfilename in einen abstrakten Pfadnamen konvertiert und dieFile’sgetName()-Methode aufgerufen werden it, das den Namen der Datei zurückgibt, die durch diesen abstrakten Pfadnamen gekennzeichnet ist, oder die leere Zeichenfolge, wenn das angegebenefilename leer ist.

Basierend auf diesem Rückgabewert wird der Index des letzten Auftretens des '.' unter Verwendung der inString eingebauten MethodelastIndexOf(char).

Sonderfälle:

  1. Keine Erweiterung - Diese Methode gibt ein leeresString zurück

  2. Nur Erweiterung - Diese Methode gibtString nach dem Punkt zurück, z. “gitignore”

3. Fazit

Bei der Auswahl zwischen ApacheCommons undGuava haben beide Bibliotheken einige gemeinsame Funktionen und Funktionen, die in ihrer Alternative nicht enthalten sind.

Dies bedeutet, dass Sie, wenn bestimmte Funktionen erforderlich sind, die auswählen müssen, über die sie verfügen. Andernfalls können Sie, falls weitere benutzerdefinierte Szenarien erforderlich sind, diejenige auswählen, die das Beste aus Ihren Anforderungen herausholt, und diese mit Ihrer eigenen Implementierung kombinieren, um das gewünschte Ergebnis zu erzielen.

Schauen Sie sich auch alle Beispiele in diesem Artikelon Github an.