簡體   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