298 votes

Comment obtenir le nom du fichier à partir d'une chaîne contenant le chemin d'accès absolu au fichier ?

String contient un nom de fichier, C:\Hello\AnotherFolder\The File Name.PDF . Comment puis-je obtenir uniquement le nom du fichier The File Name.PDF comme une chaîne de caractères ?

J'avais prévu de diviser la chaîne, mais ce n'est pas la solution optimale.

0 votes

En ce qui concerne issuetracker.google.com/issues/37131215 il a été corrigé.

341voto

PermGenError Points 26936

Utilisez simplement Fichier.getName()

File f = new File("C:\\Hello\\AnotherFolder\\The File Name.PDF");
System.out.println(f.getName());

en utilisant Méthodes à base de chaînes :

  File f = new File("C:\\Hello\\AnotherFolder\\The File Name.PDF");  
System.out.println(f.getAbsolutePath().substring(f.getAbsolutePath().lastIndexOf("\\")+1));

1 votes

Faites attention aux noms de chemin avec "/" au lieu de "\".

1 votes

@golimar, cela devrait supprimer les chemins d'accès Windows et Unix (sans utiliser la fonction File classe) : YourStringPath.replaceAll("^.*[\\/\\\\]", "")

323voto

assylias Points 102015

Utilisation alternative Path (Java 7+) :

Path p = Paths.get("C:\\Hello\\AnotherFolder\\The File Name.PDF");
String file = p.getFileName().toString();

Notez que la division de la chaîne sur \\ dépend de la plate-forme car le séparateur de fichiers peut varier. Path#getName s'occupe de ce problème pour vous.

1 votes

Quelqu'un a-t-il fait une comparaison des performances des différentes méthodes de cette question ?

0 votes

@crush Je ne pense pas que Paths.get accède au système de fichiers. Je ne m'attendrais donc pas à ce que les performances soient sensiblement différentes de celles d'un substrat/indexOf.

7 votes

Comment se fait-il qu'il n'existe pas sur Android ? bizarre.

36voto

Sotirios Delimanolis Points 77933

Considérant le String que vous demandez est

C:\Hello\AnotherFolder\The File Name.PDF

nous devons extraire tout ce qui se trouve après le dernier séparateur, c'est-à-dire. \ . C'est ce qui nous intéresse.

Vous pouvez faire

String fullPath = "C:\\Hello\\AnotherFolder\\The File Name.PDF";
int index = fullPath.lastIndexOf("\\");
String fileName = fullPath.substring(index + 1);

Cela permettra de récupérer l'index du dernier \ en su String et extraire tout ce qui vient après dans fileName .

Si vous avez un String avec un séparateur différent, réglez le lastIndexOf pour utiliser ce séparateur. (Il y a même un surcharge qui accepte un String comme séparateur).

Je l'ai omis dans l'exemple ci-dessus, mais si vous n'êtes pas sûr de l'endroit où se trouve l'option String ou de ce qu'il pourrait contenir, vous voudrez valider que la lastIndexOf renvoie une valeur non négative car le La Javadoc indique il reviendra

-1 si l'événement n'a pas lieu

11voto

Rakesh Points 477

Vous pouvez utiliser path = C:\Hello\AnotherFolder\TheFileName.PDF

String strPath = path.substring(path.lastIndexOf("\\")+1, path.length());

0 votes

Vous devez utiliser \\ au lieu de \

2 votes

Vous ne devez pas utiliser l'une de ces options, car elle dépend de la plate-forme. / sur unix et \`(AND THERE IS A BUG IN THE MARKDOWN PARSER HERE) on windows. You can't know. Use another solution like Fichier " ou Paths .

3 votes

Est File.separator dépend également de la plateforme ? Ou cela fonctionnerait-il... String strPath = path.substring(path.lastIndexOf(File.separator)+1, path.length());

-1voto

Rakesh Points 477
String strPath = path.substring(path.lastIndexOf("\")+1, path.length());

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X