在jar中打开资源:URI不是分层的

时间:2015-01-13 10:08:26

标签: java maven jar

我正在尝试为特定的文件格式编写转换器。应使用配置文件过滤转换后的文件。到目前为止,一切都很顺利,但我在打包的jar中读取文件时遇到了问题。

我的文件(Windows)具有以下结构:

converter/src/main/resources/files/AStoXES.properties(还有3个属性文件)

如果我在Netbeans中执行此代码,一切正常,文件将被读取:

this.fileConfig = new PropertiesConfiguration(new File(testing.class.getClassLoader().getResource("files/AStoXES.properties").toURI()));

但是,如果我打包Apache Maven执行clean install并运行整个程序,我将获得java.lang.IllegalArgumentException: URI is not hierarchical

花了几个小时与谷歌共度时间后,我发现很多线程遇到了同样的问题并测试了很多东西,但这些提案都没有帮助我摆脱这个问题。

我需要将文件内容作为java.io.File,因此使用InputstreamgetResourceAsStream(argument)无法帮助我,因为我需要使用其中的属性。< / p>

有人知道如何解决这个问题吗?

3 个答案:

答案 0 :(得分:1)

按照AndréStannek提供的链接(Loading a properties file from Java package)解决了这个问题。

这种方式可以阅读。不知道PropertiesConfiguration也接受了InputStreams。

            InputStream in = testing.class.getClassLoader().getResourceAsStream("files/AStoCSV.properties");
            this.fileConfig = new PropertiesConfiguration();
            this.fileConfig.load(in);
            try {
                in.close();
            } catch (IOException ex) {
                Logger.getLogger(ConverterControl.class.getName()).log(Level.SEVERE, null, ex);
            }

感谢所有人。

答案 1 :(得分:0)

尝试获取正在运行的jar文件,并将其作为zip文件访问。

这可能有所帮助:

How to get the path of a running JAR file?

答案 2 :(得分:0)

作为解决方案/ hack,您可以创建一个临时文件(以及与此文件对应的OutputStream)然后&#34;写&#34;您的输入流进入输出流。您最终会获得原始文件的副本。