我想部署在类路径中包含一些文件的 jar

I want to deploy the jar that include some file in classpath

当我使用此命令 java -jar myapp.jar 执行 jar 时,我遇到了 FileNotFoundException.

我的项目是一个基本的 Gradle java 应用程序。我将文件放在 ROOT/src/main/resources/testfile/test1.txt 中。我尝试 运行 IDE 中的代码使用类路径检查文件是否存在。

File file = ResourceUtils.getFile("classpath:testfile/test1.txt");
System.out.println(file.exists());

这是事实,但是当我执行作为命令 'gradle build' 结果的构建文件时,我遇到了 FileNotFoundException。当我取消归档 jar 时,我可以看到文件(\BOOT-INF\classes\testfile\test1.txt)

实际上,我想用示例文件部署 spring 引导 jar,我将放入初始化代码。请帮忙。谢谢。

您不能像 java.io.File 那样读取 jar 中的资源,正如它在 @Shailesh 共享的 link 中所说的那样

InputStream is = this.getClass().getClassLoader().getResourceAsStream("classpath:testfile/test1.txt")) 

读取文件作为输入流,然后可以将其转换为字符串,然后在需要时将其转换为 class。

假设您实际上想读取文件而不是尝试使用 class 加载器寻址资源:

    InputStream in = getClass().getResourceAsStream("/testfile/test1.txt");
    BufferedReader reader = new BufferedReader( new InputStreamReader( in ) );
    String line = null;
    while( (line = reader.readLine() ) != null )
      System.out.println("Line: " + line);

对我有用