我有一个xml格式的配置文件,我需要加载到我的java代码中。在测试时,我已经通过它的绝对URL导入了它,但现在我要将项目编译和部署为jar,并且不再适用了。
根据以前的经验,我认为正确的方法是使用ClassLoader,但我遇到了一些困难。也许是因为我的项目设置,我不知道。我想我能够做到这一点,正如我过去所做的那样,但我真的想确保我以标准,传统和/或正确的方式做到这一点,这样我就不需要每次都进行实验这就出现了。
以下是我尝试实施的代码:http://www.mkyong.com/java/java-read-a-file-from-resources-folder/
但是,这段代码:
ClassLoader classLoader = getClass().getClassLoader();
File file = new File(classLoader.getResource("file/test.xml").getFile());
由于需要抽象类的静态方法中的文件,我无法使用。因此我用以下代码将其切换出来:
ClassLoader classLoader = XmlConfigLoader.class.getClassLoader();
File file = new File(classLoader.getResource("configuration.xml").getFile());
XmlConfigLoader是包含的类。 "configuration.xml"
位于src/main/resources
- 文件夹中,就像示例中的"file/test.xml"
我在调试模式下运行代码,发现file
的路径错误。它不是查看src/main/resources
,而是指向target/classes
作为附加信息,这是一个Maven项目。
更新
我的当前代码实际上工作得很好,除了一个bug。该文件在编译时自动传输到target/classes
文件夹。但是,url中的空格被%20
替换,我必须手动更改它们以使系统找到该文件。我相信有更好的解决方案。任何人吗?
答案 0 :(得分:0)
文件具有路径“target / classes”是有道理的,因为这是jar的清单文件中的Class-Path。如果您想让它在其他地方查找,请编辑清单文件并将资源类路径附加到它。
有关如何在Setting classpath for a JAR
更改jar类路径的详细信息当您使用maven时,最简单的方法是将资源文件放入src / main / resources / META-INF目录,maven将为您排序。见http://maven.apache.org/guides/getting-started/index.html#How_do_I_add_resources_to_my_JAR