0

Jar 内から構成ファイルにアクセスする必要があるため、次を使用します。

URL configUrl = Object.class.getResource("/config.xml");

ここで、URL を File オブジェクトに変換する必要があります。これは、下流の ConfigurationFile オブジェクトが初期化のために必要とするものだからです。これを試すと:

new File(configUrl.toURI())

私は得る:

 java.lang.IllegalArgumentException: URI is not hierarchical

これを試すと:

 new File(Thread.currentThread().getContextClassLoader().getResource("config.xml").getFile())

私は得る:

File does not exist: 'file:\E:\Apps\jarfile.jar!\config.xml'

注: 残念ながら、InputStream に File オブジェクトが必要です。

4

3 に答える 3

2

ファイルがJAR内にある場合...getResourceAsStream()を使用して直接読み取るか、URLを使用して...

URL urlConfig = Object.class.getResource(CONFIG_FILE);
if (urlConfig == null) {
    // throw <error>
}
URLConnection connConfig = urlConfig.openConnection();
InputStream isConfig = connConfig.getInputStream(); // do things

コンテンツを一時ファイルに保存します...(1秒待ちます... mmm)

public static File doThing(InputStream is) throws IOException {
    File tmp = null;
    FileOutputStream tmpOs = null;
    try {
        tmp = File.createTempFile("xml", "tmp");
        tmpOs = new FileOutputStream(tmp);
        int len = -1;
        byte[] b = new byte[4096];
        while ((len = is.read(b)) != -1) {
            tmpOs.write(b, 0, len);
        }
    } finally {
        try { is.close(); } catch (Exception e) {}
        try { tmpOs.close(); } catch (Exception e) {}
    }
    return tmp;
}
于 2013-01-06T08:55:22.273 に答える
2

あなたの質問は意味がありません。リソースは JAR ファイル内にある場合があり、JAR ファイル内のアイテムは単にファイルではなく、File.

限目。

オブジェクトが必要な場合Fileは、アイテムを JAR ファイルとは別に配布する必要があります。

于 2013-01-06T08:30:53.073 に答える
-3

これを試しましたか:

ファイル f;
試す {
  f = 新しいファイル (url.toURI());
} catch(URISyntaxException e) {
  f = 新しいファイル (url.getPath());
}
于 2013-01-06T08:24:28.300 に答える