2012-01-17 58 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訪問,因爲它們不是實際的磁盤文件。