在jar中查找静态文件

时间:2013-01-21 04:46:42

标签: java jar

我正在尝试使用一个jar文件,它本身就是另一个Web项目中的Web应用程序。在我使用eclipse导出到jar功能创建的jar中,我将csv文件存储在一个文件夹中。要在jar中的代码中使用相对路径,我可以使用

访问它
MyClass.class.getResource(ApplicationConstants.ALIASESFILE).getPath(); 

这在我部署(glassfish)并将项目用作单独的应用程序时工作正常。但是当我在另一个项目中使用相同的内容时,它会给出如下所示的路径

D:\javaProjects\AutomodeGS_Prachi\lib\internal\RESTWSGS.jar!\aliases\aliases.csv

我收到的文件未发现异常。可能出错?

2 个答案:

答案 0 :(得分:2)

这可以很好地使用glassfish可能是因为glassfish在文件系统上爆炸了jar,因此你的csv文件实际上是文件系统的文件,

如果你试图从另一个项目中读取它会失败,因为包含你的文件的jar在classpath中很好,但是csv文件在jar文件下并且它不再是File

您可以将其视为Stream

InputStream is = MyClass.class.getResourceAsStream(ApplicationConstants.ALIASESFILE); 

答案 1 :(得分:2)

getResource()方法返回“jar:”URL。该URL的路径组件不是普通的文件系统路径名,不能使用Java的文件类直接打开。

执行此操作的简单方法是使用Class.getResourceAsStream(...)打开流。如果您需要JAR条目的“标识符”,请使用Class.getResource(...),然后使用URL.openStream()打开该流。