【问题标题】:I want to deploy the jar that include some file in classpath我想部署在类路径中包含一些文件的 jar
【发布时间】:2019-10-11 10:36:42
【问题描述】:

当我使用这个命令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 boot jar,我会把初始化的代码放上去。请帮忙。谢谢。

【问题讨论】:

标签: java spring-boot classpath


【解决方案1】:

假设您实际上想要读取文件而不是尝试使用类加载器来处理资源:

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

对我有用

【讨论】:

  • 旁注:创建本地 IO 流时使用 try-with-resources
【解决方案2】:

您无法将 jar 中的资源读取为 java.io.File,正如 @Shailesh 共享的链接中所说的那样

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

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

【讨论】:

  • 以下通常会减少麻烦:MyClass.class.getResourceAsStream("/testfile/test1.txt")
猜你喜欢
  • 2012-02-15
  • 2023-03-18
  • 2010-09-16
  • 2023-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多