2011-01-21 46 views
7
public class ABC { 
    public ABC() { 
     File file = new File("xyz.xml"); 

例外,但是當我跑我的罐子如下:文件中未發現罐子

java -jar filename.jar arguments.... 

則顯示錯誤:

java.lang.IllegalArgumentException: InputStream cannot be null 
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:120) 
at com.ensarm.niidle.web.proxy.ABC.<init>(ABC.java:47) 

我怎樣才能解決這個問題?

回答

10

如果您需要閱讀JAR中的文件內容,則不能直接使用File類。 使用ClassLoader來加載:

// for example read the SeleniumConfiguration.xml in the default package

InputStream input = SeleniumConfiguration.class.getResourceAsStream("/SeleniumConfiguration.xml"); 
+1

是的,正確的。您無法打開「文件」,因爲它假定您位於操作系統或網絡上。它不會「看到瓶子裏面」。很好的答案@ qrtt1。你打敗我來描述它。 :) – 2011-01-20 14:25:41

+0

謝謝qrtt1 – swarup7m 2011-03-05 09:36:54

4

的NullPointerException異常清楚地表明該文件沒有被發現。

InputStream input=ABC.class.getResourceAsStream("/Element.xml");

您的XML文件在哪裏?如果將它放在與ABC.class相同的包(jar文件內的目錄)中,那麼它應該是Element.xml而不帶前導斜槓。

0

你把你的xml文件放在jar文件的根目錄下嗎?如果你使用像路徑 「/Element.xml」,jar文件結構應該是這樣的:

JAR文件

  • COM
  • META-INF
  • Element.xml
1

通常情況下,您可以按照建議使用InputStream,但是如果您希望對文件執行進一步的非Java操作,例如使用外部應用程序對其進行解密,則可以使用FileOutputStream將此流寫入文件,然後使用i t的路徑作爲正確的文件路徑。簡而言之,您可以將此文件解壓縮到您的文件系統。