Récupère le nom du fichier à partir d'un emplacement de fichier en Java

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 façon la plus simple de le faire?

Il doit être aussi général 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() - tout cela aurait été idéal si c'était possible - car ce n'est pas nécessairement un préfixe http:// cela pourrait être c:/ ou quelque chose de similaire.

31
demandé sur SpaceCore186 2009-06-18 11:36:03

5 réponses

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 s'exécute 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.

79
répondu akarnokd 2016-12-01 10:09:26
new File(absolutePath).getName();
22
répondu victor hugo 2009-06-18 07:38:58

Apache Commons IO fournit la classe FilenameUtils qui vous donne un ensemble assez riche de fonctions utilitaires pour obtenir facilement les différents composants des noms de fichiers, bien que la classe java.Io.File fournisse les bases.

17
répondu skaffman 2009-06-18 07:39:17

Depuis Apache Commons IO FileNameUtils

String fileName = FilenameUtils.getName(stringNameWithPath);
13
répondu Sebastian Juarez 2013-09-17 20:31:37

Voici 2 façons(les deux sont indépendantes du système D'exploitation.)

En Utilisant Paths: Depuis 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");
1
répondu Om Sao 2017-08-03 17:20:55