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 文件中,而 JAR 文件中的项目根本不是文件,或者File.

时期。

如果您需要一个File对象,您将不得不与 JAR 文件分开分发该项目。

于 2013-01-06T08:30:53.073 回答
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 秒...嗯)

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 回答
-3

你有没有试过这个:

文件 f;
尝试 {
  f = 新文件(url.toURI());
} 捕捉(URISyntaxException e){
  f = 新文件(url.getPath());
}
于 2013-01-06T08:24:28.300 回答