En Java, étant donné un java.net.URL
ou un String
sous la forme de http://www.example.com/some/path/to/a/file.xml
, quel est le moyen le plus simple d'obtenir le nom du fichier, sans l'extension? Donc, dans cet exemple, je recherche quelque chose qui retourne "file"
.
Je peux penser à plusieurs façons de le faire, mais je recherche quelque chose qui soit facile à lire et court.
Réponses:
Au lieu de réinventer la roue, que diriez-vous d'utiliser Apache commons-io :
la source
URL#getPath
etString#substring
ouPath#getFileName
ouFile#getName
).la source
substring()
http://example.org/file#anchor
,http://example.org/file?p=foo&q=bar
nihttp://example.org/file.xml#/p=foo&q=bar
String url = new URL(original_url).getPath()
et ajoutez un cas spécial pour les noms de fichiers qui ne contiennent pas de,.
cela fonctionne bien.Si vous n'avez pas besoin de vous débarrasser de l'extension de fichier, voici un moyen de le faire sans recourir à une manipulation de String sujette aux erreurs et sans utiliser de bibliothèques externes. Fonctionne avec Java 1.7+:
la source
URI.getPath()
renvoie aString
, donc je ne vois pas pourquoi cela ne fonctionnerait pasgetPath
et utilisez la surcharge d'URI à la place.Paths.get(new URI(url))
? Cela ne semble pas fonctionner pour moiCela devrait à peu près le couper (je vous laisse la gestion des erreurs):
la source
http://www.example.com/
ouhttp://www.example.com/folder/
)lastIndexOf
ne fonctionne pas de cette façon. Mais l'intention est claire.la source
Bon mot:
Code complet (dans une scala REPL):
Remarque :
URI#gePath
est déjà suffisamment intelligent pour supprimer les paramètres de requête et le schéma du protocole. Exemples:la source
Obtenez le nom du fichier avec l'extension , sans extension , uniquement l'extension avec seulement 3 lignes:
Résultat du journal:
J'espère que cela vous aidera.
la source
J'ai trouvé ceci:
la source
Il existe plusieurs moyens:
E / S de fichier Java 7:
Apache Commons:
Utilisation de Jersey:
Sous-chaîne:
la source
Paths.get(new URL(strUrl).getFile()).getFileName().toString();
Merci pour l'idée!Rester simple :
la source
url.getFile()
parurl.toString()
et cela fonctionne avec#
dans le chemin.la source
Voici le moyen le plus simple de le faire sous Android. Je sais que cela ne fonctionnera pas en Java, mais cela peut aider les développeurs d'applications Android.
la source
Créez un objet URL à partir de la chaîne. Lorsque vous avez un objet URL pour la première fois, il existe des méthodes pour extraire facilement n'importe quel extrait d'informations dont vous avez besoin.
Je peux fortement recommander le site Web Javaalmanac qui a des tonnes d'exemples, mais qui a depuis déménagé. Vous pourriez trouver http://exampledepot.8waytrips.com/egs/java.io/File2Uri.html intéressant:
la source
Si vous souhaitez obtenir uniquement le nom de fichier à partir d'un java.net.URL (sans aucun paramètre de requête), vous pouvez utiliser la fonction suivante:
Par exemple, cette URL d'entrée:
Serait traduit en cette chaîne de sortie:
la source
J'ai constaté que certaines URL transmises directement à
FilenameUtils.getName
renvoyer des résultats indésirables, cela doit être encapsulé pour éviter les exploits.Par exemple,
Retour
ce que je doute que quiconque veuille autoriser.
La fonction suivante semble fonctionner correctement et montre certains de ces cas de test, et elle retourne
null
lorsque le nom de fichier ne peut pas être déterminé.Ceci est résumé avec quelques cas de tests simples dans l'exemple suivant:
la source
Les URL peuvent avoir des paramètres à la fin, ceci
la source
/
peut apparaître en fragments. Vous extrairez les mauvaises choses.L'
Url
objet dans urllib vous permet d'accéder au nom de fichier sans échappement du chemin. Voici quelques exemples:la source
réponse d'Andy refaite en utilisant split ():
la source
la source
Que dis-tu de ça:
la source
Pour renvoyer le nom de fichier sans extension et sans paramètres, utilisez ce qui suit:
Afin de renvoyer le nom de fichier avec l'extension sans paramètres, utilisez ceci:
la source
Au-delà de toutes les méthodes avancées, mon truc simple est
StringTokenizer
:la source
Si vous utilisez Spring , il existe un assistant pour gérer les URI. Voici la solution:
la source
renvoie un nouveau fichier (Uri.parse (url) .getPath ()). getName ()
la source
la source
J'ai le même problème, avec le vôtre. Je l'ai résolu par ceci:
la source
import java.io. *;
J'espère que cela t'aidera.
la source