无法从资源文件夹中使用相对路径获取JSON文件
我想在使用相对路径的主要方法中从我的资源文件夹中获取JSON文件。该代码使用绝对路径工作,但是一旦我从我想要的项目生成一个jar文件就会中断。无法从资源文件夹中使用相对路径获取JSON文件
public static void main(String[] args) throws FileNotFoundException {
// Read in database
db = Database.read(Thread.currentThread().getContextClassLoader().getResource("JSON/inhabitants.json").toExternalForm());
names = db.getAllNames();
读取调用数据库中使用inputstream读取文件的方法。
public static Database read(String filename) throws FileNotFoundException {
InputStream is = new FileInputStream(filename);
Reader reader = new InputStreamReader(is);
return gson.fromJson(reader, Database.class);
}
我得到的错误是:
java.io.FileNotFoundException: 文件:/Users/timpelser/IdeaProjects/TurfApp/target/classes/JSON/inhabitants.json (FileInputStream.java:138)中的java.io.FileInputStream.open0(原生 方法)上的java.io.FileInputStream.open(FileInputStream.java:195)在 java.io.FileInputStream。(FileInputStream.java:93)at Core.Database.re广告(Database.java:22)在Main.main(Main.java:51)... 11多个
在目录中的文件/Users/timpelser/IdeaProjects/TurfApp/target/classes/JSON/inhabitants.json
确实存在,但是,所以我不知道是什么出错了。
这里是我的文件夹结构(Maven的基本结构):
是否有将仍能我来部署它作为一个jar文件的解决方案?
EDIT(25/09):如果我使用的替代的getResource的getResourceAsStream,我收到以下错误:
Caused by: java.io.FileNotFoundException: [email protected] (No such file or directory)
at java.io.FileInputStream.open0(Native Method)
at java.io.FileInputStream.open(FileInputStream.java:195)
at java.io.FileInputStream.<init>(FileInputStream.java:138)
at java.io.FileInputStream.<init>(FileInputStream.java:93)
at Core.Database.read(Database.java:22)
at Main.main(Main.java:51)
... 11 more
你必须使用getResourceAsStream
从运行jar文件里读取文件(其中包含文件在src\main\resources
)!
我是使用getResourcAsStream获取文件未找到异常 –
我不知道您使用的是哪种开发环境。如果你运行它,例如在Eclipse中,Eclipse应该像处理jar一样处理这个调用,但是jar里面有什么?查找然后转到classpath,并且'src \ main \ resources'必须位于classpath中!请检查您的情况是否属于这种情况。 (在Eclipse中右键单击src \ main \ resources' - >“Build Path” - >“用作源文件夹”) –
我正在使用IntelliJ Ultimate Edition,资源设置为默认资源文件夹 –
仅供参考,为什么要将json文件放入目标文件夹?目标是建立文件夹,并且每当你做'mvn clean'时都会被删除' – amicoderozer
我没有故意这样做,我只是将文件添加到资源文件夹,并且在构建工件时将它添加到目标文件夹 –