无法从资源文件夹中使用相对路径获取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的基本结构):

folder structure

是否有将仍能我来部署它作为一个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 
+0

仅供参考,为什么要将json文件放入目标文件夹?目标是建立文件夹,并且每当你做'mvn clean'时都会被删除' – amicoderozer

+0

我没有故意这样做,我只是将文件添加到资源文件夹,并且在构建工件时将它添加到目标文件夹 –

你必须使用getResourceAsStream从运行jar文件里读取文件(其中包含文件在src\main\resources)!

+0

我是使用getResourcAsStream获取文件未找到异常 –

+0

我不知道您使用的是哪种开发环境。如果你运行它,例如在Eclipse中,Eclipse应该像处理jar一样处理这个调用,但是jar里面有什么?查找然后转到classpath,并且'src \ main \ resources'必须位于classpath中!请检查您的情况是否属于这种情况。 (在Eclipse中右键单击src \ main \ resources' - >“Build Path” - >“用作源文件夹”) –

+0

我正在使用IntelliJ Ultimate Edition,资源设置为默认资源文件夹 –