Java Class.getResource在Eclipse中作为独立的exe返回不正确的路径
我有一个Java应用程序,我从类路径读取XML文件(Java Class.getResource在Eclipse中作为独立的exe返回不正确的路径,java,eclipse,jar,executable-jar,Java,Eclipse,Jar,Executable Jar,我有一个Java应用程序,我从类路径读取XML文件(xmlFileName),如下所示: URL file = null; // Get file from resources folder try { file = MainPanel.class.getResource("/com/adc/resources/" + xmlFileName); LoggingSample.getLogger().erro
xmlFileName
),如下所示:
URL file = null;
// Get file from resources folder
try {
file = MainPanel.class.getResource("/com/adc/resources/"
+ xmlFileName);
LoggingSample.getLogger().error(
"File " + file); --> Debug message
} catch (Exception e) {
LoggingSample.getLogger().error("URL parsed " + xmlFileName);
}
我在上面添加了一条调试消息。当我从eclipse中运行应用程序时,我获得了正确的localworkspace路径,并且我的应用程序成功启动。但是,当我创建一个独立的jar并尝试运行它时,我的路径是错误的。请参阅log4j
文件输出
我做错了什么?有人能指出吗
2015-02-23 18:53:14,990 - Project - ERROR - File Path /C:/Users/phantom.j/Documents/GitHub/sec-assess/PROJECT/bin/com/adc/resources/MetaProperty.xml
2015-02-23 18:54:26,100 - Project- ERROR - File Path com/adc/resources/MetaProperty.xml
编辑:我添加了一些调试日志消息,并看到在eclipse的情况下,我将getResource作为文件:。。。但是当我得到rsrc时:。。如何使其一致
编辑2:我认为这是我打包罐子的方式有问题。当您从eclipse中导出时,人们会选择哪些选项:
a) 将所需库提取到生成的JAR中
b) 将所需库打包到生成的JAR中
c) 将所需库复制到生成的JAR旁边的子文件夹中
哪种方式更可取
2015-02-23 19:25:16,896 - Project - ERROR - File file:/C:/Users/phantom.j/Documents/GitHub/sec-assess/PROJECT/bin/com/adc/resources/MetaProperty.xml
2015-02-23 19:26:23,280 - Project - ERROR - File rsrc:com/adc/resources/MetaProperty.xml
这应该是类路径中的正确路径。从eclipse运行时,将从光盘读取资源。运行jar时,它就在jar中。问题是,如何处理URL
您可以使用
getResourceAsStream()
?这样,您就不必处理如何打开它进行阅读。您没有发现任何错误。它没有说“URL解析”+xmlFileName)。我还建议不要在日志中丢失异常e。@shikjohari不,我在日志中没有看到任何异常。这里没有任何错误getResource
用于从.jar文件中加载一个文件,这正是它在这里所做的。在Eclipse中运行时,它只需将代码编译成.class
文件,将所有内容放入/bin文件夹中并启动应用程序,而不是将所有内容包装在.jar文件中。这就是为什么在这种情况下路径不是相对的。向我们展示更多代码。您正在尝试将URL视为文件吗?从jar加载的资源不是文件。实际上,它从类路径读取资源。它是否在jar中取决于应用程序的部署和配置方式