作为 JAR 运行时未找到类路径资源:
运行打包为 JAR(Java 存档文件)的 Java 应用程序时,尝试加载类路径使用 @Value 等注释的资源可能会导致 FileNotFoundException 错误。虽然这些资源在开发时可能存在于 IDE(集成开发环境)中,但可能无法从 JAR 中访问它们。
了解问题:
类路径资源默认位于项目的 src/main/resources 目录中。从 IDE 运行应用程序时,文件系统上的应用程序可以直接使用这些资源。但是,在构建 JAR 时,这些资源将捆绑在 JAR 文件中,不再作为文件系统上的单独文件存在。
从 JAR 文件访问资源:
给定代码中使用的方法resource.getFile() 期望资源作为文件系统上的文件可用。但是,由于 JAR 文件中的类路径资源无法以这种方式访问,因此会引发错误。要解决此问题,请改用resource.getInputStream()。此方法将资源的内容作为输入流检索,无论其位置如何。
示例代码:
<code class="java">@Value("${message.file}") private Resource messageResource; public void run(String... arg0) throws Exception { // Read resource as input stream rather than file InputStream inputStream = messageResource.getInputStream(); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); String line; while ((line = reader.readLine()) != null) { logger.debug("Line: " + line); } }</code>
使用 getInputStream() 确保类路径资源可以无论它们是否存在于文件系统上或捆绑在 JAR 中,都可以访问。
以上是为什么我的类路径资源在运行 JAR 时会导致 FileNotFoundException?的详细内容。更多信息请关注PHP中文网其他相关文章!