J'ai un String
qui fournit un chemin absolu vers un fichier (y compris le nom du fichier). Je veux juste obtenir le nom du fichier. Quelle est la manière la plus simple de faire ça?
Elle doit être aussi générale que possible car je ne peux pas savoir à l'avance quelle sera l'URL. Je ne peux pas simplement créer un objet URL et utiliser getFile()
- bien que cela aurait été idéal si c'était possible - car ce n'est pas nécessairement un http://
le préfixe pourrait être c:/ou quelque chose de similaire.
new File(fileName).getName();
ou
int idx = fileName.replaceAll("\\\\", "/").lastIndexOf("/");
return idx >= 0 ? fileName.substring(idx + 1) : fileName;
Notez que la première solution dépend du système. Il ne prend en compte que le caractère séparateur de chemin du système. Donc, si votre code fonctionne sur un système Unix et reçoit un chemin Windows, cela ne fonctionnera pas. C'est le cas lors du traitement des téléchargements de fichiers envoyés par Internet Explorer.
new File(absolutePath).getName();
Apache Commons IO fournit la classe FilenameUtils qui vous offre un ensemble assez riche de fonctions utilitaires pour obtenir facilement les divers composants des noms de fichiers, bien que la classe Java.io.File fournisse les bases.
De Apache Commons IO FileNameUtils
String fileName = FilenameUtils.getName(stringNameWithPath);
Voici 2 façons (les deux sont indépendantes du système d'exploitation.)
Utilisation de Paths
: depuis la 1.7
Path p = Paths.get(<Absolute Path of Linux/Windows system>);
String fileName = p.getFileName().toString();
String directory = p.getParent().toString();
Utilisation de FilenameUtils
dans Apache Commons IO:
String name1 = FilenameUtils.getName("/ab/cd/xyz.txt");
String name2 = FilenameUtils.getName("c:\\ab\\cd\\xyz.txt");