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

问题描述 投票:1回答:2

我试图使用相对路径在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();

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

  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的java.io.FileInputStream.open0(Native Method)中。 FileInputStream.open(FileInputStream.java:195)位于java.io.FileInputStream。(FileInputStream.java:138),位于Core.Database.read的java.io.FileInputStream。(FileInputStream.java:93)(Database.java:22 )在Main.main(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
java maven jar resources inputstream
2个回答
1
投票

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


0
投票

用这个,

Resource resource = new classpathResource(json);

new ObjectMapper.readValue(resource.getInputStream(),Object.class);
© www.soinside.com 2019 - 2024. All rights reserved.