为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕码人8056858 2023-10-13 16:28:18
当我使用此命令执行 jar 时java -jar myapp.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。(\BOOT-INF\classes\testfile\test1.txt)当我取消归档 jar 时,我可以看到该文件。实际上,我想使用示例文件部署 spring boot jar,并且我将放置用于初始化的代码。请帮忙。谢谢。
查看完整描述

3 回答

?
狐的传说

TA贡献1804条经验 获得超3个赞

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


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


这对我有用


查看完整回答
反对 回复 2023-10-13
?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

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

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

将文件作为输入流读取,然后可以将其转换为 String,然后根据需要将其转换为类。


查看完整回答
反对 回复 2023-10-13
?
慕娘9325324

TA贡献1783条经验 获得超4个赞

'this.getClass().getClassLoader().getResourceAsStream()' 是一个不错的选择


我遇到同样的问题。唯一的区别是我想要读取文件后的返回类型—— String 。于是,我找到了一个好用的api—— this.getClass().getClassLoader().getResource(String name)。


String read = null;

URL resource = this.getClass().getClassLoader().getResource("static/facility-tree.json");

CharSource charSource = Resources.asCharSource(resource, Charset.defaultCharset());

read = charSource.read();

CharSource和Resources来自Guava,因此需要在pom.xml中添加依赖。


<!--guava->

<dependency>

    <groupId>com.google.guava</groupId>

    <artifactId>guava</artifactId>

    <version>31.1-jre</version>

</dependency>


查看完整回答
反对 回复 2023-10-13
  • 3 回答
  • 0 关注
  • 101 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信