web-dev-qa-db-fra.com

Java: comment obtenir un fichier à partir d'une URL d'échappement?

Je reçois une URL qui localise un fichier local (le fait que je reçois une URL n'est pas sous mon contrôle). L'URL est échappée valablement comme défini dans RFC2396. Comment puis-je transformer cela en un objet de fichier Java?

Curieusement, la méthode URL getFile () renvoie une chaîne, pas un fichier.

J'ai créé un répertoire appelé "/ tmp/certains dir" (avec un caractère d'espacement entre "certains" et "dir"), qui est correctement localisé par l'URL suivante: "fichier: /// tmp/certains% 20dir" (citations ajoutées pour plus de clarté).

Comment puis-je convertir cette URL en un fichier Java?

Pour donner plus de détails sur mon problème, les impressions suivantes sont fausses:

URL url = new URL( "file:///tmp/some%20dir" );
File f = new File( url.getFile() );
System.out.println( "Does dir exist? " + f.exists() );

Alors que ce qui suit (en remplaçant manuellement "% 20" par un espace) s'imprime vrai:

URL url = new URL( "file:///tmp/some%20dir" );
File f = new File( url.getFile().replaceAll( "%20", " " ) );
System.out.println( "Does dir exist? " + f.exists() );

Notez que je ne demande pas pourquoi le premier exemple affiche faux ni pourquoi le deuxième exemple utilisant mon hacky replaceAll affiche vrai, je demande comment convertir une URL d'échappement en un Java = Objet fichier.

MODIFIER : merci à tous, c'était presque une dupe mais pas exactement.

Bêtement, je cherchais une méthode d'aide dans la classe URL elle-même.

Ce qui suit fonctionne comme prévu pour obtenir un fichier Java à partir d'une URL Java:

URL url = new URL( "file:///home/nonet/some%20dir" );
File f = new File( URLDecoder.decode( url.getFile(), "UTF-8" ) );
45
SyntaxT3rr0r
URLDecoder.decode(url);//deprecated
URLDecoder.decode(url, "UTF-8"); //use this instead

Voir la question connexe Comment décompressez-vous les URL en Java?

20
Cesar

Le constructeur File prenant un URI en combinaison avec URL#toURI() devrait fonctionner:

URL url = getItSomehow();
File file = new File(url.toURI());
66
BalusC

AFAIK comme ceci Paths.get(url.toURI()).toFile() est le meilleur, en commençant par Java 7. Voir aussi Conversion Java fichier: // URL vers Chemin du fichier (...), indépendant de la plateforme, y compris les chemins UNC .

6
vorburger