0

Java ゲーム内で XML ファイルをロードする際に問題があります。ファイルの場所は次のとおりです(Eclipseから):

Eclipse IDE のパッケージ エクスプローラー

私は調査を行ってきましたが、どうやらJARファイルでxmlファイルを使用するには、呼び出す必要があります

DocumentBuilder.parse(InputStream)

問題は、それを使用して InputStream を取得しようとすると、getResourceAsStream("res/xml/items.xml") 常に null が返されることです。

nullを返さないようにするにはどうすればよいですか? res フォルダーを「src」フォルダー内に配置したくありませんが、設定する必要がある Eclipse の設定はありますか? パスの正しい文字列は何でしょうか? ありがとう!

編集:

私のコード:

try {
    DocumentBuilder db = dbf.newDocumentBuilder();
    InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("res/xml/items.xml");
    dom = db.parse(is);
} catch(Exception e) {
    e.printStackTrace();
}

これでもnullになります。

ここに画像の説明を入力

4

1 に答える 1

4

したがって、Eclipseにソースフォルダとして「res」を使用するように指示したとすると、ルックアップには2つの問題があります。

Item.class.getResourceAsStream("res/xml/items.xml");

これは相対パスであるため、存在getResourceAsStream()するディレクトリの前に追加されItem.classます(ドキュメントを参照)。

2番目の問題は、Eclipseが「ソース」フォルダーをクラスパスのルートとして扱うことです。したがって、「res」を除外するようにパスを変更する必要があります。

1つのオプションは、絶対パスを使用することです。"/xml/items.xml"

より良いオプションは、を呼び出すことThread.currentThread().getContextClassLoader().getResourceAsStream()です。これは、アプリサーバーと自己完結型アプリケーションで正しく機能します(そして、それに入るのに良い習慣です)。ただし、パスから「res」を省略する必要があります。

于 2013-03-20T21:54:24.010 に答える