2011-12-13 10 views
12

Mam plik zawarty w katalogu w ścieżce klas. Wygląda to tak: pl/shenlon/io/gui/appData/file.txt. Teraz, gdy próbuję przekonwertować go do pliku i odczytać z tego kodu:Błąd: `error - java.lang.IllegalArgumentException: URI nie jest hierarchiczny podczas pobierania pliku z ścieżki klasy

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

uzyskać następujące: -

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

Jak mogę rozwiązać ten problem?

+1

próbowałeś użyć pliku cityNamesFile = new File ("classpath: <ścieżka_do_pliku_in_classpath>")? – maks

Odpowiedz

7

Jeśli klasa powołaniem jest się w tym samym opakowaniu co plik tekstowy, wystarczy użyć:

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

OK, dzięki. Ale teraz chciałbym zmienić kodowanie danych wysyłanych do UTF8. Jak mogłem to zrobić? Ok, zrobiłem to. –

+1

Skaner ma inny konstruktor, który pobiera InputStream * i * oraz nazwę zestawu znaków do użycia (jako String): http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html# Scanner (java.io.InputStream,% 20java.lang.String) - Po prostu zrób to zamiast: Scanner cns = new Scanner (is, "UTF-8"); –

+0

thanx, zapisałem mój dzień. –

6

Wymień

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

z

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

działa tylko w Eclipse dla mnie, nie w słoiku uruchamianym z terminala – vemv

+0

Jaką klasę clas używacie? z wiersza poleceń? Eclipse obsługuje je automatycznie. – laz

+0

Próbowałem ustawić wyraźną ścieżkę klasy, po prostu uruchomić 'java -jar xxx.jar', z emulatora terminala, xxx.jar jest jar eksportowany przez Eclipse. – vemv

Powiązane problemy