我正在使用这段代码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。
答案 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());