3

jarにアーカイブされているMethodsという静的クラスに次のコードがあります。

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

最初のSystem.out(1)は言う:

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

2番目の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

FileNotFoundExceptionファイルがすでにjar内で見つかったのに、4行目でがスローされる理由がわかりません。

4

1 に答える 1

4

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

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

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

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

于 2012-01-17T09:46:59.810 に答える