当前位置: 首页 > 知识库问答 >
问题:

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

寿子轩
2023-03-14

当我使用

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();

等等。它们导致正确的路径,例如:

>

  • 文件:/D:/Projects/myProject/target/classes/static/assets/config/fileName(对于toExternalForm)

    /D: /Projects/myProject/target/classes/static/assets/config/fileName(对于getFile)

    然而,当我尝试时,所有这些都会导致空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(系统找不到指定的路径)当路径在project-app-1.0中时。当我用7zip打开它时,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);
      }
    

  • 共有1个答案

    杨阳飇
    2023-03-14

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

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

    InputStream in = ClassLoader.getSystemResourceAsStream("static/assets/config/foo.txt");
    
     类似资料:
    • 注意:test.class文件也使用了example.jar文件中的类文件,有自己的包结构。 我知道我可以将它们放在一个jar文件中,不幸的是我需要将test.class文件分开。

    • 我有一个Spring启动应用程序,当通过intellij运行时工作正常。但是当我从jar运行它时,我得到了下面的异常。 下面是我的pom文件。 我试着用两个 和 然后我通过java运行jar-jar-DParamName="有些Param" 我做错了什么?我是Spring的新手。任何帮助都将不胜感激。

    • 当我运行访问目录中其他文件的jar文件时,我得到以下: 线程“main”java.nio.file.nosuchfileException异常:src\filetobeaccessed.txt.lck在sun.nio.fs.windowsException.translateToioException(未知源)在sun.nio.fs.windowsException.reshrowasioExce

    • 当我试图通过控制台通过jar文件运行应用程序时,在登录事件期间,它会给出一个异常“java.lang.NullPointerException:Location is required”。但当我使用intellij IDE运行应用程序时,它工作得很好。 它给出了行的例外情况: 我也尝试给出fxml文件的绝对路径。它只在我使用jar文件运行应用程序时发生。jar中也没有文件丢失。这可能是什么原因造成

    • "app-login\pom.xml" “应用程序登录客户端\pom.xml” “应用程序登录服务器\pom.xml” "app-login-share\pom.xml" 在最后一分钟,我看到“lib-resource”项目位于“lib-bloated”下,请在下面的“lib-bloated\pom.xml”中找到它 提前谢谢。

    • 问题内容: 我在Java中遇到了一些问题。看看这个。 太酷了,对,但是如何回合: 哎呀?知道为什么第一个有效而不是第二个有效吗?我如何-jar我的scala? 预先谢谢你,兄弟。 问题答案: 如果定义-jar,则-classpath会被忽略: Java手册: -jar使用此选项时,JAR文件是所有用户类的源,而其他用户类路径设置将被忽略。 您可以在清单元数据中定义类路径依赖项。 启动应用程序的最简