2010-09-02 12 views
10

Esiste un modo semplice per convertire un URL che contiene caratteri a due byte in un percorso assoluto?Converti URL in AbsolutePath

Il motivo che mi chiedo è Sto cercando di trovare le risorse in questo modo:

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

Il programma non riesce a trovare il file. So che il percorso contiene '% 20' per tutti gli spazi che potrei convertire ma il mio vero problema è che sto usando un sistema operativo giapponese e quando il file jar del programma si trova in una directory con testo giapponese (ad esempio デ ス ク ト ッ I) ottengo il URL-encoding del nome della directory, in questo modo:

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

Penso di poter ottenere i codici byte UTF-8 e convertirlo nei caratteri corretti per trovare il file, ma mi chiedo se c'è un modo più semplice per farlo. Qualsiasi aiuto sarebbe molto apprezzato.

nt

+0

che non è "spazzatura". Quelle sono rappresentazioni sfuggite di personaggi. Sono valori legittimi. Il motivo per cui il frammento di codice non funziona è perché Class.getResources e File hanno spazi di root differenti. –

+0

Esiste la classe che posso usare per convertire il percorso in caratteri leggibili normali? – nite

risposta

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

thx, come stavo dicendo qui sotto, funziona solo con netbeans. quando compilo l'app mi imbatto in un errore. – nite

+0

Moritz ha capito. Un oggetto File non può creare un'istanza utilizzando un URL per una risorsa archiviata. Dovrai riprodurlo in streaming. –

+2

ha ottenuto un'eccezione "URI non è gerarchico" – Igal

3

File ha un costruttore di prendere un argomento di tipo java.net.URI per questo caso:

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

Ho provato questo. Quando eseguo il programma in Netbeans funziona, ma quando una build non funziona. – nite

+4

L'errore che sto ottenendo è: java.lang.IllegalArgumentException: URI non è gerarchico – nite

+1

Potrebbe essere che si impacchetta l'app con le risorse in un file '.jar'? Non puoi creare un oggetto 'File' da quel' URI', poiché la risorsa non è un file ma una voce in quel '.jar'. – Moritz