2011-09-30 20 views
5

Ho un'app java in cui sto tentando di caricare un file di testo che verrà incluso nel jar.getResource con riferimento directory padre

Quando faccio getClass().getResource("https://stackoverflow.com/a/b/c/"), è in grado di creare l'URL per quel percorso e posso stamparlo e tutto sembra a posto.

Tuttavia, se provo getClass().getResource(/a/b/../"), quindi ottengo un URL null indietro.

Sembra non piacere il .. nel percorso. Qualcuno capisce cosa sto sbagliando? Posso pubblicare più codice se sarebbe utile.

+0

Questa domanda risponde alla domanda che stavo per cercare. Ho un getResource ("../ icons/SomeIcon.png") che restituisce null durante il caricamento da un jar, ma restituisce correttamente la risorsa durante il caricamento dal filesystem. Fa schifo che Java non risolva il .. in entrambi i casi. – Trejkaz

risposta

5

Il normalize() methods (ce ne sono quattro) nella classe FilenameUtils potrebbe essere di aiuto. È nello Apache Commons IO library.

final String name = "https://stackoverflow.com/a/b/../"; 
final String normalizedName = FilenameUtils.normalize(name, true); // "https://stackoverflow.com/a/" 
getClass().getResource(normalizedName); 
+1

Impressionante questo ha funzionato. Ho usato il metodo normalize (name, true) per mantenere le barre di stile unix (/) su sistemi Windows. Grazie! –

+0

@Trejkaz: Grazie per il suggerimento di modifica! Purtroppo è stato rifiutato da altri e devo modificarlo manualmente. Per compensare i tuoi punti persi di +2, ho controllato i tuoi post e ho svalutato alcuni di loro. – palacsint

2

Il percorso specificato in getResource() non è un percorso del file system e non può essere risolto canonicamente nello stesso modo in cui i percorsi vengono risolti dall'oggetto File (e dal suo ilk). Posso prendere che stai cercando di leggere una risorsa relativa ad un altro percorso?

+0

Ya quindi sto recuperando parti del percorso da diversi punti del codice, quindi quando combino le stringhe hanno ".." in esse. Non sto cercando di rompere sopra la directory di base che ottengo con getResource ("/"). La risorsa che sto cercando di leggere è relativa ad un altro percorso, ma ancora all'interno del barattolo e qualcosa che potrei leggere se ho rimosso manualmente il ".." dal percorso. Forse è quello che dovrò fare. –