2010-09-02 26 views
10

¿Hay alguna manera fácil de convertir una URL que contenga caracteres de dos bytes en una ruta absoluta?Convertir URL a AbsolutePath

La razón que pido es que estoy tratando de encontrar recursos de la siguiente manera:

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

El programa no puede encontrar el archivo. Sé que la ruta contiene '% 20' para todos los espacios que puedo convertir, pero mi verdadero problema es que estoy usando un SO japonés y cuando el archivo jar del programa está en un directorio con texto japonés (por ejemplo, デ ス ク I I I) obtengo el URL-encoding del nombre del directorio, así:

% E3% 83% 87% E3% 82% B9% E3% 82% AF% E3% 83% 88% E3% 83% 83% E3% 83% 97

Creo que podría obtener los códigos de bytes UTF-8 y convertir esto en los caracteres adecuados para encontrar el archivo, pero me pregunto si hay una manera más fácil de hacerlo. Cualquier ayuda sería muy apreciada.

nt

+0

Eso no es "basura". Esas son representaciones de personajes escapadas. Ellos son valores legítimos. La razón por la cual el fragmento de código no funciona es porque Class.getResources y File tienen diferentes espacios de raíz. –

+0

¿Hay alguna clase que pueda usar para convertir la ruta a caracteres legibles normales? – nite

Respuesta

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

thx, como decía a continuación, esto solo funciona en netbeans. cuando compilo la aplicación me encuentro con un error. – nite

+0

Moritz lo consiguió. Un objeto File no puede instanciar el uso de una URL a un recurso archivado. Tendrás que transmitirlo. –

+2

tiene una excepción "URI no es jerárquico" – Igal

3

File tiene un constructor toma un argumento de tipo java.net.URI para este caso:

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

Intenté esto. Cuando ejecuto el programa en Netbeans funciona, pero cuando una compilación es no funciona. – nite

+4

El error que recibo es: java.lang.IllegalArgumentException: URI no es jerárquico – nite

+1

¿Podría ser que está agrupando su aplicación con los recursos en un archivo '.jar'? No puede crear un objeto 'File' a partir de ese' URI', ya que el recurso no es un archivo, sino una entrada en ese '.jar'. – Moritz

Cuestiones relacionadas