web-dev-qa-db-fra.com

Existe-t-il une nouvelle méthode Java 8 pour récupérer l'extension de fichier?

Ce que j'ai fait jusqu'à présent est le suivant:

String fileName = "file.date.txt";
String ext = fileName.substring(fileName.lastIndexOf('.') + 1);

System.out.printf("'%s'%n", ext); // prints: 'txt'

Existe-t-il un moyen plus pratique dans Java 8?

17
mike
6
Binkan Salaryman

Non, il n'y a pas de moyen plus efficace/pratique dans JDK, mais de nombreuses bibliothèques vous proposent des méthodes prêtes à cet effet, comme Guava: Files.getFileExtension(fileName) qui encapsule votre code dans une seule méthode (avec validation supplémentaire ).

14
Pshemo

Pas Java8, mais vous pouvez toujours utiliser FilenameUtils.getExtension() de la bibliothèque Apache Commons. :)

8
null

En fait, il y a une nouvelle façon de penser au retour des extensions de fichier dans Java 8.

La plupart des "anciennes" méthodes décrites dans les autres réponses renvoient une chaîne vide s'il n'y a pas d'extension, mais bien que cela évite NullPointerExceptions, il est facile d'oublier que tous les fichiers n'ont pas d'extension. En renvoyant un Facultatif , vous pouvez vous rappeler à vous et aux autres ce fait, et vous pouvez également faire une distinction entre les noms de fichiers avec une extension vide (point à la fin) et les fichiers sans extension (pas de point dans le nom du fichier)

public static Optional<String> findExtension(String fileName) {
    int lastIndex = fileName.lastIndexOf('.');
    if (lastIndex == -1) {
        return Optional.empty();
    }
    return Optional.of(fileName.substring(lastIndex + 1));
}
2
lbalazscs

Utilisation FilenameUtils.getExtension de Apache Commons IO

Exemple:

Vous pouvez fournir nom de chemin complet ou niquement le nom de fichier.

String myString1 = FilenameUtils.getExtension("helloworld.exe"); // returns "exe"
String myString2 = FilenameUtils.getExtension("/home/abc/yey.xls"); // returns "xls"

J'espère que cela t'aides ..

0
Dulith De Costa