我正在尝试使用相对路径在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基本结构):
是否有解决方案仍然可以将其部署为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
答案 0 :(得分:1)
您必须使用getResourceAsStream
从正在运行的jar中读取文件(其中包含src\main\resources
中的文件)!
答案 1 :(得分:0)
使用此
Resource resource = new classpathResource(json);
new ObjectMapper.readValue(resource.getInputStream(),Object.class);