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

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

1. Vue d'ensemble

Dans ce rapide tutoriel, nous allons montrer comment obtenir l'extension de fichier par programmation en Java. We’ll focus on three major approaches to the problem.

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

Par conséquent, à titre d'exemple rapide, si notre nom de fichier estjarvis.txt, il renverra lesString "txt” comme extension du fichier.

2. Obtenir l'extension de fichier

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

  • lorsqu'un nom de fichier n'a pas d'extension, comme un fichiermakefile

  • et si un nom de fichier se compose uniquement de l'extension, comme.gitignore ou.DS_Store.

2.1. Approche de gestion deString simple

Avec cette approche, nous utiliserons une approche de gestion simple deString 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 renvoyer 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. No extension - cette méthode renverra unString vide

  2. Only extension - cette méthode renverra lesString après le point, par exemple “gitignore”

2.2. FilenameUtils.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 fichiere.g. «C:/example/com/demo.java».

La méthodegetExtension(String) vérifiera si lefilename donné est vide ou non.

Sifilename 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éthodeindexOfExtension(String) qui, à son tour, utiliselastIndexof(char) pour trouver la dernière occurrence du «.». Ces méthodes sont toutes deux fournies parFilenameUtils.

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éthodeindexOfLastSeparator(String), qui gérera un fichier au format Unix ou Windows.

Cas spéciaux:

  1. No extension - cette méthode renverra une chaîne vide.

  2. Only extension - cette méthode renverra lesString 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 à nospom.xml:


    com.google.guava
    guava
    24.1.1-jre

Pour la dernière dépendance, nous pouvons vérifierMaven Central.

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

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

La méthodegetFileExtension(String) vérifiera d'abord si lefilename donné est vide.

Si lefilename n'est pas vide, alors il créera une instance deFile en convertissant lefilename donné en un chemin abstrait et en appelant la méthodeFile’sgetName() sur it, qui retournera le nom du fichier désigné par ce chemin abstrait, ou la chaîne vide si lefilename 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 classeStringlastIndexOf(char).

Cas spéciaux:

  1. Aucune extension - cette méthode renverra unString vide

  2. Seule extension - cette méthode retournera lesString après le point, par exemple “gitignore”

3. Conclusion

Lorsque vous choisissez entre ApacheCommons etGuava, les deux bibliothèques ont des fonctionnalités communes et elles ont également des fonctionnalités absentes de leur alternative.

Cela signifie que si certaines fonctionnalités sont requises, choisissez celle qui les possède. Sinon, si davantage de scénarios personnalisés sont nécessaires, choisissez celui qui répond le mieux à vos besoins 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 articleon Github.