0

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

我收到一个文件未找到异常。可能是什么问题?

4

2 回答 2

2

这在 glassfish 上运行良好可能是因为 glassfish 在文件系统上爆炸了 jar,因此您的 csv 文件实际上是文件系统的文件,

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

您可以将其阅读为 Stream

InputStream is = MyClass.class.getResourceAsStream(ApplicationConstants.ALIASESFILE); 
于 2013-01-21T05:02:11.523 回答
2

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

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

于 2013-01-21T05:03:44.140 回答