Comment obtenir l'extension de fichier d'un fichier en Java

1. Vue d'ensemble

Dans ce tutoriel rapide, nous montrerons comment obtenir l'extension de fichier par programme en Java. Nous allons nous concentrer sur trois grandes approches du problème.

Dans nos implémentations, les caractères après le final ' .' sera retourné.

Par conséquent, à titre d'exemple rapide, si notre nom de fichier est jarvis.txt, il renverra la chaîne « txt» comme extension du fichier.

2. Obtention de l'extension de fichier

Pour chaque approche, nous apprendrons à la mettre en œuvre et à suivre ce qui se passe dans deux cas particuliers:

  • quand un nom de fichier n'a pas d'extensions, comme un fichier makefile
  • et si un nom de fichier se compose uniquement de l'extension, comme .gitignore ou .DS_Store.

2.1. Approche de manipulation de cordes simple

Avec cette approche, nous utiliserons une approche simple de gestion des chaînes pour trouver l'extension:

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

Cette méthode vérifiera le point "." occurrence dans le nom de fichier donné.

S'il existe, il trouvera la dernière position du point '.' et renvoyez les caractères après cela, les caractères après le dernier point '.' connu sous le nom d'extension de fichier.

Cas spéciaux:

  1. Aucune extension - cette méthode renverra une chaîne vide
  2. Seule l'extension - cette méthode retournera la chaîne après le point, par exemple «gitignore»

2.2. Nom de fichierUtils.getExtension d'Apache Commons IO

Dans la deuxième approche, nous trouverons l'extension à l'aide d'une classe utilitaire fournie par la bibliothèque Apache Commons IO:

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

Ici, au lieu du nom du fichier, nous pouvons également spécifier le chemin complet vers un fichier, par exemple « C: /baeldung/com/demo.java ».

La méthode getExtension (String) vérifiera si le nom de fichier donné est vide ou non.

Si le nom de fichier est vide ou nul, getExtension (String filename) renverra l'instance qui lui a été donnée. Sinon, il renvoie l'extension du nom de fichier.

Pour ce faire, il utilise la méthode indexOfExtension (String) qui, à son tour, utilise lastIndexof (char) pour trouver la dernière occurrence du '.'. Ces méthodes sont toutes deux fournies par FilenameUtils .

Cette méthode vérifie également qu'il n'y a pas de séparateur de répertoire après le dernier point en utilisant une autre méthode indexOfLastSeparator (String), qui gérera un fichier au format Unix ou Windows.

Cas spéciaux:

  1. Aucune extension - cette méthode renverra une chaîne vide.
  2. Seule l'extension - cette méthode retournera la chaîne après le point, par exemple «gitignore»

2.3. Utilisation de la bibliothèque Guava

Dans cette dernière approche, nous utiliserons la bibliothèque Guava pour trouver l'extension.

Pour ajouter une bibliothèque Guava, nous pouvons ajouter la dépendance suivante à notre pom.xml:

 com.google.guava guava 24.1.1-jre 

Pour les dernières dépendances, nous pouvons consulter Maven Central.

Après avoir ajouté la bibliothèque, nous pouvons simplement utiliser sa méthode getFileExtension :

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

La méthode getFileExtension (String) vérifie d'abord si le nom de fichier donné est vide.

Si le nom de fichier n'est pas vide, il créera une instance de File en convertissant le nom de fichier donné en un chemin abstrait et en appelant la méthode getName () de File dessus, qui retournera le nom du fichier indiqué par ce chemin abstrait, ou le chaîne vide si le nom de fichier donné est vide.

Sur la base de cette valeur de retour, il récupère l'index de la dernière occurrence du '.' en utilisant la méthode intégrée de la classe String lastIndexOf (char) .

Cas spéciaux:

  1. Aucune extension - cette méthode renverra une chaîne vide
  2. Seule l'extension - cette méthode retournera la chaîne après le point, par exemple «gitignore»

3. Conclusion

Lors du choix entre Apache Commons et Guava , alors que les deux bibliothèques ont des fonctionnalités communes et qu'elles ont également des fonctionnalités absentes de leur alternative.

Cela signifie que si certaines fonctionnalités sont requises, choisissez celle qui la possède. Sinon, si plus de scénarios personnalisés sont nécessaires, choisissez celui qui fait le plus de ce dont vous avez besoin et n'hésitez pas à l'envelopper avec votre propre implémentation pour obtenir le résultat souhaité.

Consultez également tous les exemples de cet article sur Github.