猿问

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

当我使用此命令执行 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,并且我将放置用于初始化的代码。请帮忙。谢谢。


慕码人8056858
浏览 131回答 3
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);这对我有用

扬帆大鱼

您无法将 jar 内的资源读取为 java.io.File,正如 @Shailesh 共享的链接中所述InputStream is = this.getClass().getClassLoader().getResourceAsStream("classpath:testfile/test1.txt"))将文件作为输入流读取,然后可以将其转换为 String,然后根据需要将其转换为类。

慕娘9325324

'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>&nbsp; &nbsp; <groupId>com.google.guava</groupId>&nbsp; &nbsp; <artifactId>guava</artifactId>&nbsp; &nbsp; <version>31.1-jre</version></dependency>
随时随地看视频慕课网APP

相关分类

Java
我要回答