2011-12-13 13 views
12

Ho un file contenuto in una directory in un classpath. Sembra questo pl/shenlon/io/gui/appData/file.txt. Ora, quando si tenta di convertirlo in un file e leggere con questo codice:Errore: `error - java.lang.IllegalArgumentException: URI non è gerarchico durante il recupero di un file da un classpath

File cityNamesFile = new File(ClassLoader.getSystemResource("pl/shenlon/io/gui/appData/list.txt").toURI()); 
Scanner cns = new Scanner(cityNamesFile); 

ottengo il seguente: -

error - java.lang.IllegalArgumentException: URI is not hierarchical.

Come posso risolvere questo problema?

+1

hai provato a usare File cityNamesFile = new File ("classpath: ")? – maks

risposta

7

Se la classe chiamata stessa è nella stessa confezione del file di testo, basta usare:

InputStream is = getClass().getResourceAsStream("list.txt"); 
Scanner cns = new Scanner(is); 
+0

Ok, grazie. Ma ora mi piacerebbe cambiare la codifica dei dati inviati a UTF8. Come potrei farlo? Ok, fatto. –

+1

Lo scanner ha un altro costruttore che accetta un InputStream * e * e il nome del set di caratteri da utilizzare (come String): http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html# Scanner (java.io.InputStream,% 20java.lang.String) - Esegui invece questa operazione: Scanner cns = new Scanner (is, "UTF-8"); –

+0

Grazie, ho salvato la giornata. –

6

Sostituire

File cityNamesFile = new File(ClassLoader.getSystemResource("pl/shenlon/io/gui/appData/list.txt").toURI()); 

con

File cityNamesFile = new File(Thread.currentThread().getContextClassLoader().getResource("pl/shenlon/io/gui/appData/list.txt").getFile()); 
+3

funziona solo in Eclipse per me, non nel jar eseguito dal terminale – vemv

+0

Che percorso di classe stai usando dalla riga di comando? Eclipse gestisce automaticamente per te. – laz

+0

Ho provato a non impostare alcun classpath esplicito, ho appena eseguito 'java -jar xxx.jar', dall'emulatore di terminale, xxx.jar è un jar esportato da Eclipse. – vemv

Problemi correlati