web-dev-qa-db-fra.com

Obtenir le nom du fichier à partir d'un emplacement de fichier dans 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 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.

34
Ankur
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.

80
akarnokd
new File(absolutePath).getName();
23
victor hugo

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.

18
skaffman

De Apache Commons IO FileNameUtils

String fileName = FilenameUtils.getName(stringNameWithPath);
16
Sebastian Juarez

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");
1
Om Prakash Sao