2011-12-13 17 views
12

Tengo un archivo dentro de un directorio en un classpath. Se ve así pl/shenlon/io/gui/appData/file.txt. Ahora, cuando trato de convertirlo en un archivo y leer con este código:Error: `error - java.lang.IllegalArgumentException: el URI no es jerárquico al obtener un archivo de un classpath

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

me sale el siguiente: -

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

¿Cómo puedo solucionar este problema?

+1

has necesitado utilizar Archivo cityNamesFile = new File ("classpath: ")? – maks

Respuesta

7

Si la clase de llamada es en sí en el mismo paquete que el archivo de texto, sólo tiene que utilizar:

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

Ok, gracias. Pero ahora me gustaría cambiar la codificación de los datos enviados a UTF8. ¿Cómo podría hacer eso? Ok, hecho eso. –

+1

El escáner tiene otro constructor que toma un InputStream * y * y el nombre del conjunto de caracteres a usar (como String): http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html# Escáner (java.io.InputStream,% 20java.lang.String) - Así que haga esto en su lugar: Scanner cns = new Scanner (es, "UTF-8"); –

+0

gracias, salvó mi día. –

6

Reemplazar

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

solo funciona en Eclipse para mí, no en el jar desde el terminal – vemv

+0

¿Qué classpath estás usando? desde la linea de comando? Eclipse maneja eso automáticamente para usted. – laz

+0

Lo intenté sin configurar ningún classpath explícito, simplemente ejecuto 'java -jar xxx.jar', desde el emulador de terminal, xxx.jar es un jar exportado por Eclipse. – vemv

Cuestiones relacionadas