无法使用相对路径从资源文件夹中获取JSON文件

时间:2017-09-25 10:13:27

标签: java maven jar resources inputstream

我正在尝试使用相对路径在main方法中从我的资源文件夹中获取JSON文件。该代码使用绝对路径,但是一旦我从我的项目中构建一个jar文件就会中断,这是我想要的。

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();

读取调用数据库中的一个方法,该方法使用输入流来读取文件。

  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   (没有这样的文件或目录)在java.io.FileInputStream.open0(Native   方法)在java.io.FileInputStream.open(FileInputStream.java:195)at at   java.io.FileInputStream。(FileInputStream.java:138)at   java.io.FileInputStream。(FileInputStream.java:93)at   Main.main的Core.Database.read(Database.java:22)(Main.java:51)...   另外11个

目录/Users/timpelser/IdeaProjects/TurfApp/target/classes/JSON/inhabitants.json

中的文件

确实存在,所以我不知道出了什么问题。

这是我的文件夹结构(Maven基本结构):

folder structure

是否有解决方案仍然可以将其部署为jar文件?

编辑(25/09):如果我使用getResourceAsStream而不是getResource,我收到以下错误:

Caused by: java.io.FileNotFoundException: java.io.BufferedInputStream@4f8e5cde (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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

使用此

Resource resource = new classpathResource(json);

new ObjectMapper.readValue(resource.getInputStream(),Object.class);