访问jar中的json文件时发生java.io.FileNotFoundException

访问jar中的json文件时发生java.io.FileNotFoundException,java,json,maven,Java,Json,Maven,我正在使用以下代码File serviceAccountFile=new文件(Main.class.getResource(“/serviceAccountKey.json”).getFile())访问我的“资源”文件夹中的json文件。当我从intellij运行它时,它工作正常。但是我在从jar运行程序时遇到了这个错误 java.io.FileNotFoundException: file:\C:\Users\Ashirwada\Documents\IIT\JAVA\POS\target\PO

我正在使用以下代码
File serviceAccountFile=new文件(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)
java.io.FileNotFoundException:文件:\C:\Users\Ashirwada\Documents\IIT\java\POS\target\POS-0.6-jar-with-dependencies.jar\serviceAccountKey.json(文件名、目录名或卷标语法不正确)
位于java.base/java.io.FileInputStream.open0(本机方法)
位于java.base/java.io.FileInputStream.open(未知源代码)
位于java.base/java.io.FileInputStream。(未知源)
位于ashirwada.pos.Firebase.initializeFreebase(Firebase.java:27)
位于ashirwada.pos.Main.init(Main.java:33)
位于javafx.graphics/com.sun.javafx.application.LaunchImpl.launchApplication1(未知源)
位于javafx.graphics/com.sun.javafx.application.launchempl.lambda$launchApplication$2(未知源)
位于java.base/java.lang.Thread.run(未知源)

我的资源文件中还有其他文件,如fxml文件和jpg。它们被检测到,运行正常。这个json文件是唯一给我带来问题的东西。我用winrar打开了Jar,json文件和其余的fxml文件和jpg都在那里。我正在使用maven编译带有所需依赖项的jar。

系统无法解析文件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));

这是因为在您将资源打包到jar中之后,通过
URL.getFile()
获得的字符串对于构造函数
文件(字符串路径)
无效。使用
getResourceAsStream
可以解决您的问题。

试试这个

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

try(“serviceAccountKey.json”)不起作用。尝试过它,现在应用程序甚至不会从intellijMy启动fxml文件是使用父root=FXMLLoader.load(getClass().getResource(“/UI/Login.fxml”))访问的;它们工作得很好。我不明白为什么只有这个不起作用。我发现了这个线程,可能对你有帮助,我使用了
FileUtils.copyInputStreamToFile
,它起了作用。谢谢