我正在通过jar文件中的代码运行工具(虚拟地球仪)。代码读取资源(XML文件)以使用类似这样的语法在类Config的方法中提供一些配置选项:
URL localURL = Config.class.getResource("Config.xml");
我想提供我自己的Config.xml文件,其中的设置会覆盖jar文件中包含的文件。
我不知道如何做到这一点。我知道getResource()方法探索了类路径来查找资源。所以我想到了这个: - 将具有我自己设置的文件副本放在特定目录中 - 将此目录放在类路径前面
但无济于事:getResource()仍然总是从jar文件加载资源。
我一定错过了什么......
我尝试从应用程序jar中删除Config.xml文件。失败:应用程序失败,因为getResource()返回null。在我看来像
Config.class.getResource("Config.xml")
只查找包含类Config的jar文件中的资源,而我认为它在类路径中查找。
答案 0 :(得分:1)
好的,明白了。问题是这样的:我的Config类实际上是一个包,即vis.globe.Config.java,所以getResource(“Config.Xxml”)确实在寻找一个名为vis.globe.Config.xml的文件。
因此,对于类路径,例如“../config:../jar/appl.jar”,它将查找文件Config.xml,而不是../config,但是在../config/vis中/全球。
所以解决方案是在../config中创建一个子目录结构,它反映了类Config.java的完全限定名,即
../config/vis/globe/Config.xml
答案 1 :(得分:0)
您总是可以通过编程方式执行某些操作。因此,例如,您将首先搜索名为UserConfig.xml的文件,如果找不到,则返回到名为Config.xml的文件中,该文件将在jar文件中找到。