gpt4 book ai didi

java - Spring Boot jar 中的 FileNotFoundException 但文件存在

转载 作者:行者123 更新时间:2023-11-30 06:01:30 25 4
gpt4 key购买 nike

当文件明显存在于 jar 中时,我收到 FileNotFoundException。为什么会这样?

java.io.FileNotFoundException: file:/Users/serviceuser/project/coolApp/target/coolApp-1.0-SNAPSHOT.jar!/BOOT-INF/classes!/ssl_certs/mysslstore.jks (No such file or directory)
at java.base/java.io.FileInputStream.open0(Native Method) ~[na:na]
at java.base/java.io.FileInputStream.open(FileInputStream.java:219) ~[na:na]
at java.base/java.io.FileInputStream.<init>(FileInputStream.java:157) ~[na:na]
at java.base/java.io.FileInputStream.<init>(FileInputStream.java:112) ~[na:na]

但是,我看到的是jar包中的文件。

jar -tf coolApp-1.0-SNAPSHOT.jar | grep ssl

enter image description here

编辑 我按如下方式加载文件

new FileInputStream(CoolApp.class.getClassLoader().getResource("ssl_certs/mysslstore.jks").getFile())

最佳答案

这里:

new FileInputStream(CoolApp.class.getClassLoader().getResource("ssl_certs/mysslstore.jks").getFile());

getFile() 在包含在 jar 中的 URL 上被调用。
结果,它提供了一个特定的 File 对象,因为它不是在文件系统中可直接访问的 File

还有 URL javadoc确认(强调是我的):

Class URL represents a Uniform Resource Locator, a pointer to a "resource" on the World Wide Web. A resource can be something as simple as a file or a directory, or it can be a reference to a more complicated object, such as a query to a database or to a search engine.

因此 FileInputStream(File) 构造函数不一定能够打开那个“特殊”文件:

A FileInputStream obtains input bytes from a file in a file system. What files are available depends on the host environment.

您可以将您尝试执行的操作与以下内容进行比较:

new FileInputStream("/Users/serviceuser/project/coolApp/target/coolApp-1.0-SNAPSHOT.jar!/BOOT-INF/classes!/ssl_certs/mysslstore.jks")

如您所料,操作系统文件系统无法解析 jar(mysslstore.jks) 中包含的文件。

取而代之的是,使用返回输入流的 getResourceAsStream()。该输入流引用资源表示的字节序列。这样,客户端代码就不再依赖于资源的存储方式。

InputStream is = CoolApp.class.getClassLoader().getResourceAsStream("ssl_certs/mysslstore.jks"));

关于java - Spring Boot jar 中的 FileNotFoundException 但文件存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57466273/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com