2010-09-02 8 views
10

Existe-t-il un moyen simple de convertir une URL contenant des caractères de deux octets en un chemin absolu?Convertir une URL en AbsolutePath

La raison pour laquelle je demande est que je suis en train de trouver des ressources comme ceci:

URL url=getClass().getResources("/getresources/test.txt"); 
String path=url.toString(); 
File f=new File(path); 

Le programme ne peut pas trouver le fichier. Je sais que le chemin contient '% 20' pour tous les espaces que je pourrais convertir mais mon vrai problème est que j'utilise un système d'exploitation japonais et quand le fichier jar du programme est dans un répertoire avec du texte japonais (par exemple, je reçois le URL-encoding du nom de répertoire, comme ceci:

% e3% 83% 87% e3% 82% B9% e3% 82% af% e3% 83% 88% e3% 83% 83% e3% 83% 97

Je pense que je pourrais obtenir les codes octets UTF-8 et les convertir en caractères appropriés pour trouver le fichier, mais je me demande s'il existe un moyen plus facile de le faire. Toute aide serait grandement appréciée.

nt

+0

Ce n'est pas "ordures". Ce sont des représentations de personnages échappées. Ce sont des valeurs légitimes. La raison pour laquelle votre fragment de code ne fonctionne pas est que Class.getResources et File ont des espaces racines différents. –

+0

Existe-t-il une classe que je peux utiliser pour convertir le chemin en caractères lisibles normaux? – nite

Répondre

24
URL url=getClass().getResource("/getresources/test.txt"); 
File f=new File(url.toURI()); 
+0

thx, comme je le disais ci-dessous, cela ne fonctionne que dans Netbeans. quand je compile l'application je cours dans une erreur. – nite

+0

Moritz l'a eu. Un objet File ne peut pas instancier à l'aide d'une URL vers une ressource archivée. Vous devrez le diffuser. –

+2

a obtenu une exception "URI n'est pas hiérarchique" – Igal

3

File a un constructeur prenant un argument de type java.net.URI pour ce cas:

File f = new File(url.toURI()); 
+0

J'ai essayé ça. Lorsque j'exécute le programme dans Netbeans, cela fonctionne, mais quand une version est active, ça ne marche pas. – nite

+4

L'erreur que j'obtiens est: java.lang.IllegalArgumentException: URI n'est pas hiérarchique – nite

+1

Se pourrait-il que vous regroupiez votre application avec les ressources dans un fichier '.jar'? Vous ne pouvez pas créer un objet 'File' à partir de cet' URI', car la ressource n'est pas un fichier mais une entrée dans ce '.jar'. – Moritz

Questions connexes