将jar文件URI转换为文件

时间:2013-01-06 08:17:33

标签: java jar embedded-resource

我需要从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对象。

3 个答案:

答案 0 :(得分:2)

你的问题没有意义。资源可能位于JAR文件中,JAR文件中的项目不是文件,或File.

周期。

如果您需要File对象,则必须从JAR文件中单独分发该项目。

答案 1 :(得分: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;
}

答案 2 :(得分:-3)

你试过这个:

File f;
try {
  f = new File(url.toURI());
} catch(URISyntaxException e) {
  f = new File(url.getPath());
}