2012-01-17 8 views
3

私はjarファイルにアーカイブされたメソッドと呼ばれる静的クラスに次のコードを持っている:FileNotFoundException。動作し、同時に動作しませんか?

1 System.out.println(Methods.class.getResource("tagdict.txt")); 
2 URL test=Methods.class.getResource("tagdict.txt"); 
3 System.out.println(test.getPath()); 
4 TagDictionary dict = new POSDictionary(test.getPath()); 

最初のSystem.out(1)言葉:

rsrc:de/fhg/scai/bio/harsha/classificationworkflow/tagdict.txt 

第二のSystem.outを( 2)言葉:

de/fhg/scai/bio/harsha/classificationworkflow/tagdict.txt 

4行目は

java.io.FileNotFoundException: de/fhg/scai/bio/harsha/classificationworkflow/tagdict.txt (No such file or directory) 
をスローします

ファイル 'tagdict.txt'は、 'Method.class'と同じパッケージ(de/fhg/scai/bio/harsha/classificationworkflow)に配置されています。

私は、ファイルがまだjarファイル内に見つかっていても、4行目がFileNotFoundExceptionをスローする理由を理解していません。

+0

'POSDictionary'のコンストラクタのコードは、そこに例外がスローされるので役立ちます。 – Viruzzo

答えて

4

ライン3は、getResourceによって返されたURLのパスコンポーネントを出力します。実際にそのパスがディスク上の実ファイルを表しているかどうかはチェックされません。

POSDictionaryコンストラクタが渡されたパス文字列を使用してFileを作成しようとしているようで、このパスは実際にディスク上のファイルを表していないため、例外がスローされます。

ファイルがjarファイル内に見つかったにもかかわらず、4行目がFileNotFoundExceptionをスローする理由を理解できません。

リソースがJAR内にある場合、ファイルではないためです。このようなリソースにアクセスするには、URLオブジェクトから直接入力ストリームを開くか、getResource()の代わりにgetResourceAsStream()を使用する必要があります。彼らは実際のディスクファイルではないので、java.io.Fileを使ってアクセスすることはできません。

関連する問題