FileNotFoundException异常。工作并不同时工作?

时间:2012-01-17 09:39:50

标签: java jar getresource

我在名为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.txtMethod.class放在同一个包中,即de/fhg/scai/bio/harsha/classificationworkflow

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

1 个答案:

答案 0 :(得分:4)

第3行只打印出getResource返回的网址的路径组件。它实际上并不检查该路径是否代表磁盘上的真实文件。

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

  

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

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