Come ottenere l'estensione di un file in Java

1. Panoramica

In questo breve tutorial, mostreremo come ottenere l'estensione del file a livello di programmazione in Java. Ci concentreremo su tre principali approcci al problema.

Nelle nostre implementazioni, i personaggi dopo la finale " ." verrà restituito.

Pertanto, come rapido esempio, se il nome del nostro file è jarvis.txt , restituirà la stringa " txt" come estensione del file.

2. Ottenere l'estensione del file

Per ogni approccio, impareremo come implementarlo e seguiremo cosa accade in due casi speciali:

  • quando un nome file non ha estensioni, come un file makefile
  • e se un nome file è costituito solo dall'estensione, come .gitignore o .DS_Store.

2.1. Semplice approccio alla gestione delle stringhe

Con questo approccio, utilizzeremo un semplice approccio di gestione delle stringhe per trovare l'estensione:

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

Questo metodo verificherà la presenza del punto "." occorrenza nel nome file specificato.

Se esiste, troverà l'ultima posizione del punto "." e restituisce i caratteri dopo, i caratteri dopo l'ultimo punto "." nota come estensione del file.

Casi speciali:

  1. Nessuna estensione : questo metodo restituirà una stringa vuota
  2. Solo estensione : questo metodo restituirà la stringa dopo il punto, ad esempio "gitignore"

2.2. FilenameUtils.getExtension da Apache Commons IO

Nel secondo approccio, troveremo l'estensione utilizzando una classe di utilità fornita dalla libreria Apache Commons IO:

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

Qui, invece del nome del file, possiamo anche specificare il percorso completo di un file, ad esempio " C: /baeldung/com/demo.java ".

Il metodo getExtension (String) verificherà se il nome del file specificato è vuoto o meno.

Se filename è vuoto o nullo, getExtension (String filename) restituirà l'istanza fornita. In caso contrario, restituisce l'estensione del nome del file.

Per fare ciò utilizza il metodo indexOfExtension (String) che, a sua volta, utilizza lastIndexof (char) per trovare l'ultima occorrenza di ".". Questi metodi sono entrambi forniti da FilenameUtils .

Questo metodo controlla anche che non sia presente alcun separatore di directory dopo l'ultimo punto utilizzando un altro metodo indexOfLastSeparator (String), che gestirà un file in formato Unix o Windows.

Casi speciali:

  1. Nessuna estensione : questo metodo restituirà una stringa vuota.
  2. Solo estensione : questo metodo restituirà la stringa dopo il punto, ad esempio "gitignore"

2.3. Utilizzando la libreria Guava

In quest'ultimo approccio, useremo la libreria Guava per trovare l'estensione.

Per aggiungere una libreria Guava, possiamo aggiungere la seguente dipendenza al nostro pom.xml:

 com.google.guava guava 24.1.1-jre 

Per la dipendenza più recente, possiamo controllare Maven Central.

Dopo aver aggiunto la libreria possiamo semplicemente usare il suo metodo getFileExtension :

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

Il metodo getFileExtension (String) verificherà prima se il nome file specificato è vuoto.

Se il nome del file non è vuoto, creerà un'istanza File convertendo il nome del file specificato in un percorso astratto e chiamerà il metodo getName () di File su di esso, che restituirà il nome del file indicato da questo percorso astratto, o il stringa vuota se il nome del file specificato è vuoto.

In base a questo valore restituito, recupera l'indice dell'ultima occorrenza di "." utilizzando il metodo integrato della classe String lastIndexOf (char) .

Casi speciali:

  1. Nessuna estensione: questo metodo restituirà una stringa vuota
  2. Solo estensione: questo metodo restituirà la stringa dopo il punto, ad esempio "gitignore"

3. Conclusione

Quando si sceglie tra Apache Commons e Guava , entrambe le librerie hanno alcune caratteristiche comuni e hanno anche funzionalità assenti dalla loro alternativa.

Ciò significa che se è richiesta una determinata funzionalità, scegli quella che la possiede. Altrimenti, se sono necessari più scenari personalizzati, scegli quello che fa il massimo di ciò di cui hai bisogno e sentiti libero di includerlo nella tua implementazione per ottenere il risultato desiderato.

Inoltre, controlla tutti gli esempi in questo articolo su Github.