访问jar中的json文件时出现java.io.FileNotFoundException

时间:2018-08-04 15:52:53

标签: java json maven

我正在使用这段代码File serviceAccountFile = new File(Main.class.getResource("/serviceAccountKey.json").getFile());访问“资源”文件夹中的json文件。当我从intellij运行它时,它工作正常。但是从jar运行程序时出现此错误。

java.io.FileNotFoundException: file:\C:\Users\Ashirwada\Documents\IIT\JAVA\POS\target\POS-0.6-jar-with-dependencies.jar!\serviceAccountKey.json (The filename, directory name, or volume label syntax is incorrect)
        at java.base/java.io.FileInputStream.open0(Native Method)
        at java.base/java.io.FileInputStream.open(Unknown Source)
        at java.base/java.io.FileInputStream.<init>(Unknown Source)
        at ashirwada.pos.Firebase.initializeFirebase(Firebase.java:27)
        at ashirwada.pos.Main.init(Main.java:33)
        at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(Unknown Source)
        at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(Unknown Source)
        at java.base/java.lang.Thread.run(Unknown Source)

我的资源文件中还有其他文件,例如fxml文件和jpg。他们被检测到并且运行良好。这个json文件是唯一给我带来麻烦的东西。我用winrar打开了Jar,在其中有json文件以及其他fxml文件和jpg。我正在使用maven来编译具有所需依赖项的jar。

3 个答案:

答案 0 :(得分:0)

系统无法解析文件C:\ Users \ Ashirwada \ Documents \ IIT \ JAVA \ POS \ target \ POS-0.6-jar-with-dependencies.jar!\ UI \ serviceAccountKey.json,因为该文件位于jar文件中

您应该将jar提取到一个文件夹中,然后从其中读取json文件

或者您可以将文件作为资源读取

InputStream in = etClass().getResourceAsStream("/UI/serviceAccountKey.json");
BufferedReader reader = new BufferedReader(new InputStreamReader(in));

答案 1 :(得分:0)

这是因为在将资源打包到jar中之后,由URL.getFile()获得的字符串对于构造函数File(String path)无效,而使用getResourceAsStream可能会解决您的问题。

答案 2 :(得分:0)

尝试

File(Main.class.getClassLoader().getResource("/serviceAccountKey.json").getFile());