3

我在一个名为 Methods 的静态类中有以下代码,它被归档在一个 jar 中:

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

第二个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.

我不明白为什么第 4 行会抛出 aFileNotFoundException即使文件已经在 jar 中找到。

4

1 回答 1

4

第 3 行仅打印出由getResource. 它实际上并不检查该路径是否代表磁盘上的真实文件。

看起来POSDictionary构造函数正在尝试File使用传递给它的路径字符串创建一个,并且该路径实际上并不代表磁盘上的文件,因此引发了异常。

我不明白为什么第 4 行会抛出 FileNotFoundException,即使文件已经在 jar 中找到。

因为如果资源在 JAR 中,那么它就不是文件。此类资源只能通过直接从URL对象打开输入流或使用getResourceAsStream()代替来访问getResource()。无法使用 访问java.io.File它们,因为它们不是实际的磁盘文件。

于 2012-01-17T09:46:59.810 回答