0

.jar ファイル内の初期テキスト ファイルを読み込もうとしています。ClassLoader でファイルをロードしようとしましたが、うまくいきませんでした。奇妙なことに、Eclipse 内ではこのように機能しましたが、別の実行可能 jar ファイルとしては機能しませんでした。

次に、状況を再現してみます。

クラスA:

/**
 * Read initial file.
 *
 * @return initial file
 */
private SomeObject readInitialObject() {
    String path = "object/Welcome.xml";
    File f = new File(path);
    Reader r = new Reader(f);
    SomeObject o = r.read();
    return o;
}

クラスリーダー:

private File importedFile; 
public void read() {
...
 DocumentBuilderFactory dbFactory = DocumentBuilderFactory
                .newInstance();
        DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
        Document doc = dBuilder.parse(FileLoader.load(importedFile.
                                                           getPath()));
}

クラス FileLoader

/**
 * Load input stream.
 *
 * @param path file path
 * @return input stream
 */
public static InputStream load(final String path) {
    InputStream input = FileLoader.class.getResourceAsStream(path);
    if (input == null) {
        input = FileLoader.class.getResourceAsStream("/" + path);
    }

    return input;
}

.jar ファイル:

アドバイスをいただければ幸いです。ありがとうございました!

4

4 に答える 4

1

例として、 Distributed jar file not pick up my .txt fileをご覧ください。

getResourceAsStreamで使用しているクラスへの相対パスを指定する必要があります

于 2013-03-29T13:34:35.090 に答える
0

問題は、Windows では大文字と小文字が区別されないことですが、jar ではファイル名で大文字と小文字が区別されます (Linux の場合と同様)。さらに File を使用し/ないで\ください。

したがって、実際のファイルは少し別のケースにあると思います。

于 2013-03-29T13:32:58.070 に答える
0

jar ファイル内のファイル構造は、実際の構造とは少し異なります。jar を開いて、ファイルへの正確なパスを確認できます。http://docs.oracle.com/javase/tutorial/deployment/jar/build.htmlも参照してください。

于 2013-03-29T13:31:06.490 に答える
-1

jar ファイルを開いて、ファイルをエクスポートしたかどうかを確認してください。- いいえ -> プロジェクトを jar ファイルに再度エクスポートし、エクスポートするファイルを選択します - はいの場合 -> ファイルのパスを確認します

于 2013-03-29T13:33:47.887 に答える