2011-12-13 6 views
12

クラスパス内のディレクトリ内にファイルが含まれています。これは、pl/shenlon/io/gui/appData/file.txtのように見えます。今、私は、ファイルに変換し、このコードで読み取るしようとすると:エラー: `エラー - java.lang.IllegalArgumentException:クラスパスからファイルを取得中にURIが階層化されない

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

私は、次を得る: -

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

私はこの問題を解決することができますか?

+1

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

を交換してください、あなたはファイルを使用しようとしましたcityNamesFile =新しいファイル( "classpath:")? – maks

答えて

7

あなたの呼び出し元のクラスは、テキストファイルと同じパッケージにだけ使用自体の場合:

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

ありがとう、ありがとう。しかし今、私はUTF8に送られたデータのエンコーディングを変更したいと思います。どうすればいい?さて、それをやってください。 –

+1

Scannerには、InputStream *と*および使用する文字セット名(String)を使用する別のコンストラクタがあります。http://docs.oracle.com/javase/7/docs/api/java/util/Scanner.html# Scanner(java.io.InputStream、%20java.lang.String) - これを代わりに行う:Scanner cns = new Scanner(is、 "UTF-8"); –

+0

ありがとう、私の日を救った。 –

6

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

は、私のためにEclipseでのみ動作し、端末から実行されるjarファイルでは動作しません。 – vemv

+0

どのクラスパスを使用していますか?コマンドラインから? Eclipseが自動的にそれを処理します。 – laz

+0

明示的なクラスパスを設定せずに、私はちょうどターミナルエミュレータから 'java -jar xxx.jar'を実行しました.xxx.jarはEclipseによってエクスポートされたjarです。 – vemv

関連する問題