繁体   English   中英

使用 JAR 中的文件,同时从 jar 运行应用程序

[英]Using file from within JAR, while runnig app from jar

我正在尝试使用文件,将应用程序作为 JAR 运行时。 当我通过 Intelij 运行应用程序时,一切都很好。 但是,当我尝试通过 jar 运行它时,我无法访问该文件。 我尝试阅读一些包含类似问题的主题,但没有一个有帮助(例如从 jar 中读取资源文件或如何从 Java Z68995FCBF432492D15484D04A9D2AC4 中读取资源文件和0 目标树文件? 在此处输入图像描述 在此处输入图像描述

当我使用

String path = String
        .join("", "classpath:static\assets\config\", fileName);
File file = ResourceUtils.getFile(path); 
InputStream targetStream = new FileInputStream(file)

在 intelij 运行期间,一切正常。

在 jar 的情况下,我试过:

String path = String
        .join("", "static\assets\config\", fileName).replace("\\","/")).toExternalForm();
String path2 = String
        .join("", "static\assets\config\", fileName).replace("\\","/")).getFile();
String path3 = String
        .join("", "static\assets\config\", fileName).replace("\\","/")).getPath();

和许多其他。 它们导致正确的路径,例如:

  • file:/D:/Projects/myProject/target/classes/static/assets/config/fileName(在 toExternalForm 的情况下)

  • /D:/Projects/myProject/target/classes/static/assets/config/fileName(在 getFile 的情况下)

    但是,当我尝试时,所有这些都会导致 null InputStream:

 InputStream in = getClass().getResourceAsStream(everyPath);

我收到一个错误: java.io.FileNotFoundException: D:\Projects\myProject\target\project-app-1.0.jar\BOOT-INF\classes\static\assets\config\fileName (The system cannot find the path specified)当我通过 7zip 打开它时 project-app-1.0.jar 中的路径正是: D:\Projects\myProject\target\project-app-1.0.jar\BOOT-INF\classes\static\assets\config\fileName

这就是我的资源处理程序的样子:

  private static final String[] CLASSPATH_RESOURCE_LOCATIONS = {
      "classpath:/resources/", "classpath:/static/"};
  @Override
  public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/**").addResourceLocations(
        CLASSPATH_RESOURCE_LOCATIONS);
  }

当您想在 jar 中使用某些东西时,忘记“文件”,它只是一个简单的“资源”,您必须与 getResource 一起使用。

如果您使用标准打包系统,“resources”文件夹中的所有内容都放在 JAR 的根目录下,因此如果您想读取“static\assets\config\”文件夹中的“foo.txt”文件,您必须这样做使用方法:

InputStream in = ClassLoader.getSystemResourceAsStream("static/assets/config/foo.txt");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM