java - .jar 导出不理解项目文件夹内的相对路径

标签 java jar intellij-idea relative-path

我有一个java项目,我使用了Intellij Idea。该项目运行良好,我已将其导出为 jar。 jar 导出也可以正常运行,除了有一个问题:

我的项目中有一个额外的“资源”文件夹,并且有两个 csv 文件(非常简单的结构,有两列)。在代码中,我使用了它们的相对路径,如下

private static final __MY_FILE = new File("resources/filename.csv");

正如预期的那样,当我从 IDE 运行时,它可以正常工作。但是,当我将项目导出为 jar 时,代码会因 FileNotFoundException 崩溃,因为这些相对路径不再被视为相对于项目文件夹。

暂时,我诉诸于在代码中提供完整路径(即 __MY_FILE = new File("/home/.../resources/filename.csv")),但这是显然这是一种灾难性的做法!

如何使用相对于项目文件夹的路径以使导出的 .jar 正常工作?

目录结构如下:

networkmeasurements
    /matrixmethods
        /src
    /probabilisticmethods
        /src
    /utils
        /src
    /resources
        filename.csv

我正在尝试从 matrixmethods 内的类获取资源 filename.csv

最佳答案

您不能使用 File,因为该文件并不独立存在于文件系统上。相反,您需要 getResourceAsStream(),例如

...
InputStream in = getClass().getResourceAsStream("/resources/filename.csv");
BufferedReader input = new BufferedReader(new InputStreamReader(in));
...

关于java - .jar 导出不理解项目文件夹内的相对路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20875898/

相关文章:

java - 了解 AsyncTask 与 Web 服务器访问

java - 尝试输出 UTF-8 文本,但不起作用

java - jar导出后找不到类

java - src/test/中的 IntelliJ Idea JPA 实体

git - 为什么我的 Intellij Git 插件在我单击提交后不提交文件?

java - 用字符代码而不是正则表达式替换字符串?

java - 在本地服务器上部署可运行的jar

java - 如何从可执行 jar 中的 main() 运行 TestNG 测试?

java - 无论如何用 vim/emacs + 命令行替换 IntelliJ?

java - java中的简单泛型列表