Java .jar导出不理解项目文件夹中的相对路径
我有一个java项目,我使用了Intellij Idea。该项目运行良好,我已将其导出为jar。jar导出也正常运行,除了一个问题: 我的项目中有一个额外的资源文件夹,有两个csv文件,结构非常简单,有两列。在代码中,我使用了它们的相对路径,如下所示Java .jar导出不理解项目文件夹中的相对路径,java,jar,intellij-idea,relative-path,Java,Jar,Intellij Idea,Relative Path,我有一个java项目,我使用了Intellij Idea。该项目运行良好,我已将其导出为jar。jar导出也正常运行,除了一个问题: 我的项目中有一个额外的资源文件夹,有两个csv文件,结构非常简单,有两列。在代码中,我使用了它们的相对路径,如下所示 private static final __MY_FILE = new File("resources/filename.csv"); 正如预期的那样,当我从IDE运行时,它可以正常工作。但是,当我将项目导出为jar时,代码会因FileNotF
private static final __MY_FILE = new File("resources/filename.csv");
正如预期的那样,当我从IDE运行时,它可以正常工作。但是,当我将项目导出为jar时,代码会因FileNotFoundException崩溃,因为这些相对路径不再被视为相对于项目文件夹
暂时,我求助于在代码中提供完整路径,即uu MY_FILE=new FILE/home/../resources/filename.csv,但这显然是一种灾难性的做法
如何使用相对于项目文件夹的路径以使导出的.jar工作
目录结构如下:
networkmeasurements
/matrixmethods
/src
/probabilisticmethods
/src
/utils
/src
/resources
filename.csv
我试图从matrixmethods中的类中获取资源filename.csv。您不能使用该文件,因为该文件在文件系统中不独立存在。例如,您需要getResourceAsStream
...
InputStream in = getClass().getResourceAsStream("/resources/filename.csv");
BufferedReader input = new BufferedReader(new InputStreamReader(in));
...
可能有很好的洞察力。您必须让Intellij将.csv文件识别为属性文件,以便它将它们捆绑起来。我也认为这会起作用。我之前尝试过getResource,但是java.net.URL对象总是空的。此外,我还尝试了resources/filename.csv和/resources/filename.csv。两者都返回null。看到了一些我没有预料到的事情:我将filename.csv移动到src文件夹,getResourcefilename.csv工作正常。但是getResource../src/filename.csv为空。相同的文件名和位置,相同的类路径,但我似乎无法在目录结构中提升一级。@ChthonicProject,您能提供项目的目录结构以及csv文件所在的位置吗?添加了文件夹结构。@ChthonicProject,您能确认在jar中,filename.csv文件位于resources文件夹下?