Sådan får du filtypenavnet til en fil i Java

1. Oversigt

I denne hurtige vejledning viser vi, hvordan du får filtypen programmatisk i Java. Vi fokuserer på tre hovedtilgange til problemet.

I vores implementeringer er tegnene efter den sidste '.' vil blive returneret.

Derfor, som et hurtigt eksempel, hvis vores filnavn er jarvis.txt så returnerer den Snortxt ” som filens udvidelse.

2. Sådan får du filtypen

For hver tilgang lærer vi, hvordan vi implementerer det og følger op med, hvad der sker i to specielle tilfælde:

  • når et filnavn ikke har nogen udvidelser, såsom en makefile fil
  • og hvis et filnavn kun består af udvidelsen, f.eks .gitignore eller .DS_Store.

2.1. Enkel Snor Håndteringsmetode

Med denne tilgang bruger vi en simpel Snor håndtering tilgang til at finde udvidelsen:

offentlig Valgfri getExtensionByStringHandling (String filnavn) {return Optional.ofNullable (filnavn) .filter (f -> f.contains (".")). kort (f -> f.substring (filnavn.lastIndexOf (".") + 1 )); } 

Denne metode kontrollerer for prikken '.' forekomst i det givne filnavn.

Hvis den findes, finder den punktets sidste position '.' og returner tegnene efter det, tegnene efter den sidste prik '.' kendt som filtypen.

Særlige tilfælde:

  1. Ingen udvidelse - denne metode returnerer en tom Snor
  2. Kun udvidelse - denne metode returnerer Snor efter prikken, f.eks. “Gitignore”

2.2. FilnavnUtils.getExtension fra Apache Commons IO

I den anden tilgang finder vi udvidelsen ved hjælp af en hjælpeklasse leveret af Apache Commons IO-biblioteket:

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

Her i stedet for filnavnet kan vi også angive den fulde sti til en fil f.eks.C: /baeldung/com/demo.java“.

Metoden getExtension (streng) vil kontrollere, om det givne filnavn er tom eller ej.

Hvis filnavn er tom eller nul, getExtension (streng filnavn) returnerer den instans, den blev givet. Ellers returnerer filtypenavnet.

For at gøre dette bruger den metoden indexOfExtension (streng) som igen bruger lastIndexof (char) for at finde den sidste forekomst af '.'. Disse metoder leveres begge af FilnavnUtils.

Denne metode kontrollerer også, at der ikke er nogen katalogadskiller efter den sidste prik ved hjælp af en anden metode indexOfLastSeparator (streng), som håndterer en fil i enten Unix- eller Windows-format.

Særlige tilfælde:

  1. Ingen udvidelse - denne metode returnerer en tom streng.
  2. Kun udvidelse - denne metode returnerer Snor efter prikken, f.eks. “Gitignore”

2.3. Brug af Guava-biblioteket

I denne sidste tilgang bruger vi Guava-biblioteket til at finde udvidelsen.

For at tilføje et Guava-bibliotek kan vi tilføje følgende afhængighed til vores pom.xml:

 com.google.guava guava 24.1.1-jre 

For den seneste afhængighed kan vi tjekke Maven Central.

Efter tilføjelse af biblioteket kan vi blot bruge dets getFileExtension metode:

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

Metoden getFileExtension (streng) vil først kontrollere, om det givne filnavn er tom.

Hvis den filnavn ikke er tom, så opretter den en Fil eksempel ved at konvertere det givne filnavn ind i et abstrakt stienavn og kald FilensgetName () metode over det, som returnerer navnet på filen angivet med dette abstrakte stinavn eller den tomme streng, hvis den er givet filnavn er tom.

Baseret på denne returværdi henter den indekset for den sidste forekomst af '.' ved hjælp af Snor klasse indbygget metode lastIndexOf (char).

Særlige tilfælde:

  1. Ingen udvidelse - denne metode returnerer en tom Snor
  2. Kun udvidelse - denne metode returnerer Snor efter prikken, f.eks. “Gitignore”

3. Konklusion

Når du vælger mellem Apache Commons og Guava, mens begge biblioteker har nogle fælles funktioner, og de har også funktionalitet, der ikke findes i deres alternativ.

Dette betyder, at hvis der kræves en vis funktionalitet, skal du vælge den, der har den. Ellers, hvis der kræves flere brugerdefinerede scenarier, skal du vælge den, der gør mest ud af det, du har brug for, og du er velkommen til at pakke den med din egen implementering for at få det ønskede resultat.

Tjek også alle eksemplerne i denne artikel om Github.