[英]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.