Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 重写jar文件中包含的资源_Java_Jar_Getresource - Fatal编程技术网

Java 重写jar文件中包含的资源

Java 重写jar文件中包含的资源,java,jar,getresource,Java,Jar,Getresource,我正在通过jar文件中的代码运行一个工具(虚拟地球仪)。代码读取资源(XML文件)以提供一些配置选项,在类Config的方法中使用如下语法: URL localURL = Config.class.getResource("Config.xml"); 我想提供我自己的Config.xml文件,其中的设置覆盖jar文件中包含的文件中的设置 我不清楚如何才能做到这一点。我知道getResource()方法探索类路径以查找资源。所以我想到了这个: -将具有我自己设置的文件副本放在特定目录中 -将此目

我正在通过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") 

只在包含类配置的jar文件中查找资源,而我认为它是在类路径中查找的。

您可以始终以编程方式查找某些内容。例如,您首先搜索一个名为UserConfig.xml的文件,如果找不到该文件,请返回jar文件中名为Config.xml的文件。

好,找到了。问题是:我的Config类实际上在一个包中,即vis.globe.Config.java,因此getResource(“Config.Xxml”)实际上查找一个名为vis.globe.Config.xml的文件

因此,使用诸如“./config:../jar/appl.jar”之类的类路径,它将查找文件config.xml,而不是在../config中,而是在../config/vis/globe中

因此,解决方案是在../config中创建一个子目录结构,反映类config.java的完全限定名,即

../config/vis/globe/Config.xml

最快的方法是打开jar(例如,使用winrar)并替换Config.xml文件。您不能直接将修改后的文件添加到jar中吗?当然,我可以这样做。但我真的想避免它。我真的希望允许用户通过提供自己的自定义配置设置来自定义其执行环境。在使用getResource()并加载此文件之前,请检查配置文件是否存在于所需的位置。您只能通过将自己的config.xml“更早”放在应用程序的类路径中来执行此操作。