Hoe u de bestandsextensie van een bestand in Java kunt ophalen

1. Overzicht

In deze korte zelfstudie laten we zien hoe u de bestandsextensie programmatisch kunt verkrijgen in Java. We zullen ons concentreren op drie belangrijke benaderingen van het probleem.

In onze implementaties zijn de karakters na de laatste ‘.' zal worden geretourneerd.

Daarom, als een snel voorbeeld, als onze bestandsnaam jarvis.txt dan zal het de Draadtekst" als de bestandsextensie.

2. Verkrijgen van de bestandsextensie

Voor elke aanpak leren we hoe we deze kunnen implementeren en volgen we wat er in twee speciale gevallen gebeurt:

  • wanneer een bestandsnaam geen extensies heeft, zoals een makefile het dossier
  • en als een bestandsnaam alleen uit de extensie bestaat, zoals .gitignore of .DS_Store.

2.1. Gemakkelijk Draad Verwerkingsbenadering

Met deze aanpak gebruiken we een eenvoudig Draad afhandelingsbenadering om de extensie te vinden:

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

Deze methode controleert op de punt ‘. ' voorkomen in de opgegeven bestandsnaam.

Als het bestaat, zoekt het de laatste positie van de punt ‘. ' en geef de tekens daarna terug, de tekens na de laatste punt ‘. ' bekend als de bestandsextensie.

Speciale gevallen:

  1. Geen extensie - deze methode retourneert een leeg Draad
  2. Alleen extensie - deze methode retourneert het Draad na de punt, b.v. "Gitignore"

2.2. BestandsnaamUtils.getExtension van Apache Commons IO

In de tweede benadering zullen we de extensie vinden met behulp van een hulpprogramma-klasse die wordt geleverd door de Apache Commons IO-bibliotheek:

openbare String getExtensionByApacheCommonLib (String bestandsnaam) {retourneer FilenameUtils.getExtension (bestandsnaam); }

Hier kunnen we in plaats van de bestandsnaam ook het volledige pad naar een bestand specificeren bijv.C: /baeldung/com/demo.java“.

De methode getExtension (tekenreeks) zal controleren of de gegeven bestandsnaam is leeg of niet.

Als bestandsnaam is leeg of nul, getExtension (String bestandsnaam) retourneert de instantie die het is gegeven. Anders retourneert het de extensie van de bestandsnaam.

Om dit te doen, gebruikt het de methode indexOfExtension (tekenreeks) die op zijn beurt lastIndexof (char) om de laatste instantie van de ‘. 'te vinden. Deze methoden worden beide geleverd door BestandsnaamUtils.

Deze methode controleert ook of er geen directoryscheidingsteken staat na de laatste punt door een andere methode te gebruiken indexOfLastSeparator (String), die een bestand in Unix- of Windows-indeling zal behandelen.

Speciale gevallen:

  1. Geen extensie - deze methode retourneert een lege string.
  2. Alleen extensie - deze methode retourneert het Draad na de punt, b.v. "Gitignore"

2.3. Met behulp van de Guava-bibliotheek

In deze laatste benadering zullen we de Guava-bibliotheek gebruiken om de extensie te vinden.

Om een ​​Guava-bibliotheek toe te voegen, kunnen we de volgende afhankelijkheid toevoegen aan onze pom.xml:

 com.google.guava guave 24.1.1-jre 

Voor de nieuwste afhankelijkheid kunnen we Maven Central controleren.

Nadat we de bibliotheek hebben toegevoegd, kunnen we deze gewoon gebruiken getFileExtension methode:

openbare String getExtensionByGuava (String bestandsnaam) {return Files.getFileExtension (bestandsnaam); } 

De methode getFileExtension (tekenreeks) zal eerst controleren of het gegeven bestandsnaam is leeg.

Als het bestandsnaam niet leeg is, dan wordt er een het dossier bijvoorbeeld door het gegeven bestandsnaam in een abstracte padnaam en bel BestandgetName () methode eroverheen, die de naam van het bestand zal retourneren, aangegeven door deze abstracte padnaam, of de lege string als deze is opgegeven bestandsnaam is leeg.

Op basis van deze retourwaarde haalt het de index op van de laatste keer dat de ‘. ' door het gebruiken van Draad klasse ingebouwde methode lastIndexOf (teken).

Speciale gevallen:

  1. Geen extensie - deze methode retourneert een leeg Draad
  2. Alleen extensie - deze methode retourneert het Draad na de punt, b.v. "Gitignore"

3. Conclusie

Bij het kiezen tussen Apache Commons en Guave, terwijl beide bibliotheken enkele gemeenschappelijke kenmerken hebben en ze ook functionaliteit hebben die afwezig is in hun alternatief.

Dit betekent dat als bepaalde functionaliteit vereist is, u degene kiest die deze heeft. Als dat niet het geval is, als er meer aangepaste scenario's nodig zijn, kiest u degene die het meeste doet wat u nodig heeft en voelt u zich vrij om deze te omwikkelen met uw eigen implementatie om het gewenste resultaat te krijgen.

Bekijk ook alle voorbeelden in dit artikel op Github.