【发布时间】:2018-03-06 06:37:29
【问题描述】:
我正在尝试使用相对路径在主要方法中从我的资源文件夹中获取 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();
Read 调用数据库中的一个方法,该方法使用输入流来读取文件。
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) 在 java.io.FileInputStream.(FileInputStream.java:138) 在 java.io.FileInputStream.(FileInputStream.java:93) 在 Core.Database.read(Database.java:22) 在 Main.main(Main.java:51) ... 还有 11 个
目录/Users/timpelser/IdeaProjects/TurfApp/target/classes/JSON/inhabitants.json中的文件
但是确实存在,所以我不知道出了什么问题。
这是我的文件夹结构(Maven基本结构):
是否有一个解决方案可以让我将其部署为 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
【问题讨论】:
-
仅供参考,为什么要将json文件放在目标文件夹中?目标是构建文件夹,每次执行都会被删除
mvn clean -
我不是故意这样做的,我只是将文件添加到资源文件夹中,并在构建工件时将其添加到目标文件夹中
标签: java maven jar resources inputstream