Je reçois une URL qui localise un fichier local (le fait que je reçoive une URL n'est pas sous mon contrôle). L'URL est échappée de manière valide comme défini dans la RFC2396. Comment puis-je la transformer en un objet Java File ?
Il est amusant de constater que la méthode URL getFile() renvoie une chaîne, et non un fichier.
J'ai créé un répertoire appelé "/tmp/some dir" (avec un caractère d'espacement entre "some" et "dir"), qui est correctement localisé par l'URL suivante : "file:///tmp/some%20dir" (les guillemets ont été ajoutés 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 l'exemple suivant (en remplaçant manuellement "%20" par un espace) affiche 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 n'imprime ni faux ni pourquoi le deuxième exemple utilisant mon bricolage replaceAll C'est vrai, je demande comment convertir une URL échappée en un objet Java File.
EDIT Merci à tous, c'était presque un double mais pas exactement.
Stupidement, je cherchais une méthode d'aide à l'intérieur de 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" ) );