【问题标题】:FileNotFound Exception while reading file from resource directory从资源目录读取文件时出现 FileNotFound 异常
【发布时间】:2018-12-28 12:00:04
【问题描述】:

我正在尝试使用以下代码从资源目录中读取文件

new FileInputStream(new File(getClass().getClassLoader().getResource(keyFile).getFile()))

在运行时遇到异常

java.io.FileNotFoundException: file:\D:\WorkSpace\server\target\server.jar!\BOOT-INF\classes!\config\key.pgp(文件名、目录名或卷标语法为不正确)
在 java.io.FileInputStream.open0(本机方法)
在 java.io.FileInputStream.open(未知来源)
在 java.io.FileInputStream.(未知来源)

【问题讨论】:

  • 正如它所说:文件名、目录名或卷标语法不正确。请检查语法。如果没有,请分享声明 keyFile 变量的代码
  • 实际上..当我在 jar 内部检查时文件存在...keyfile 的值是 config\key.pgp....有没有其他方法可以从 jar 中读取文件
  • 我刚刚发布的答案中的选项1应该能够从jar中读取文件。
  • @basky 在下面看到我的答案。

标签: java


【解决方案1】:

根据您尝试获取的资源在 jar 中的位置,您应该使用相对路径来获取资源。您还可以通过使用 ResourceAsStream 方法直接将资源作为 InputStream 询问资源,从而完全跳过 File 对象:

InputStream in = getClass().getResourceAsStream("/config/key.pgp");

【讨论】:

  • 赞成,但应该提到 FileFileInputStream 用于物理文件系统,而不是类路径上的资源“文件”,可能在 jar 中。
【解决方案2】:

从这里:

java.io.FileNotFoundException: file:\D:\WorkSpace\server\target\ server.jar!

看起来代码是从 jar 中运行的,并且正在寻找 jar 中的文件。

几个选项:

1.) 将文件添加到 .class 文件所在的 jar 中,并使用类路径获取文件(不要忘记前导 /):/com/mycompany/myproject/files/myfile.txt

2.) 使用文件的绝对路径: "D:\WorkSpace\server\target\BOOT-INF\classes\config\key.pgp"

【讨论】:

  • 你尝试过类似 getClass().getClassLoader().getResource("/config/key.pgp")
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多