2012-01-17 59 views
3

我在一个静态类调用的方法下面的代码是在一个罐子里存档: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。

我不明白为什么第4行抛出FileNotFoundException,即使该文件已被发现在jar中。

+0

这将有助于POSDictionary构造函数的代码,因为引发异常。 – Viruzzo 2012-01-17 09:47:48

回答

4

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

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

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

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