Java 在jar中查找静态文件

Java 在jar中查找静态文件,java,jar,Java,Jar,我正在尝试使用一个jar文件,它本身就是另一个web项目中的web应用程序。在我使用eclipse的导出到jar功能创建的jar中,我在一个文件夹中存储了一个csv文件。要在jar中的代码中使用相对路径,我使用 MyClass.class.getResource(ApplicationConstants.ALIASESFILE).getPath(); 当我部署(glassfish)并将该项目作为一个单独的应用程序使用时,这一点很好。但当我在另一个项目中使用相同的方法时,它给出了如下所示的路径

我正在尝试使用一个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

我收到一个file notfound异常。可能有什么问题?

glassfish的这一功能很好,可能是因为glassfish在文件系统上分解了jar,因此您的csv文件实际上是文件系统的文件

如果您试图从另一个项目中读取它,它会失败,因为包含您的文件的jar位于类路径中,这很好,但是csv文件位于jar文件下,它不再是
文件

你可以把它读作流

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

这在glassfish中运行良好,可能是因为glassfish在文件系统上分解了jar,因此您的csv文件实际上是文件系统的一个文件

如果您试图从另一个项目中读取它,它会失败,因为包含您的文件的jar位于类路径中,这很好,但是csv文件位于jar文件下,它不再是
文件

你可以把它读作流

InputStream is = MyClass.class.getResourceAsStream(ApplicationConstants.ALIASESFILE); 
getResource()
方法返回一个“jar:”URL。该URL的路径组件不是正常的文件系统路径名,不能使用Java的文件类直接打开

实现这一点的简单方法是使用
Class.getResourceAsStream(…)
打开流。如果您需要JAR条目的“标识符”,请使用
Class.getResource(…)
,然后使用
URL.openStream()

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


实现这一点的简单方法是使用
Class.getResourceAsStream(…)
打开流。如果您需要JAR条目的“标识符”,请使用
Class.getResource(…)
,然后使用
URL.openStream()

打开流,这样您就可以在资源文件夹中保存csv文件。如果您在部署后需要任何更改,可以如何更改?我们计划再次生成jar。这只是使用的静态文件之一,您可以在资源文件夹中保存csv文件。如果您在部署后需要任何更改,可以如何更改?我们计划再次生成jar。这只是使用的静态文件中的一个,与上面的答案相同,因此增加了可用性的数量!非常感谢你们并没有注意到时间或答案张贴:)和上面的答案相同,所以增加了有用的数量!非常感谢您没有注意到时间或回复已张贴:)