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

で例外を発見していないファイルが、次のように私は私のjarファイルを実行すると:

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クラスを直接使用することはできません。 それをロードするクラスローダを使用した:

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

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

はい、正しく入力してください。あなたがOSやネットワーク上にいると仮定しているため、「ファイル」を開くことはできません。それは瓶を「見える」ことはありません。良い答え@ qrtt1。あなたは私にそれを表現する方法を打ち明けました。 :) –

+0

ありがとうございましたqrtt1 – swarup7m

4

NullPointerExceptionが、ファイルが見つからなかったことを明らかに示しています。

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

あなたのXMLファイルはどこですか?同じパッケージ(jarファイル内のディレクトリ)にABC.classという名前を付けると、スラッシュのないElement.xmlになります。

0

xmlファイルをjarファイルのルートに配置しましたか?

  • コム
  • META-INF
  • Element.xml

のjarファイル:あなたは "/Element.xml" のようなパスを使用する場合は、jarファイルの構造は次のようにする必要があります

+0

jarを構築するために自動システムを使用しているのであれば(少なくとも手でjarを実行するのではなく)、Linuxでは少なくともjarファイルを実行してどのファイルが含まれているかを確認するか、 jar -xvfを実行してjarファイルを抽出します。 – James

+0

'jar -tf'はファイルリストを表示するだけです – Thilo

1

通常はInputStreamを使用することができますが、外部アプリケーションなどを使用してファイルを復号化するなどのJava以外の操作をしたい場合は、FileOutputStreamを使用してこのストリームをファイルに書き込んだ後、i tのパスを正しいファイルパスとして指定します。簡単に言えば、このファイルをファイルシステムに解凍することができます。