解决springboot读取jar包中⽂件的问题
转载⾃:
spring怎么读取properties⼏个实现⽅式:
String data = "";
ClassPathResource cpr = new ClassPathResource("");
try {
byte[] bdata = InputStream());
data = new String(bdata, StandardCharsets.UTF_8);
} catch (IOException e) {
LOG.warn("IOException", e);
}
场景⼆:
ClassPathResource classPathResource = new ClassPathResource("");
InputStream inputStream = InputStream();
File somethingFile = ateTempFile("test", ".txt");
try {
} finally {
IOUtils.closeQuietly(inputStream);
}
场景三:
Resource[] resources;
try {
resources = ResourcePatternResolver(resourceLoader).getResources("classpath:" + location + "/*.json");
for (int i = 0; i < resources.length; i++) {
try {
InputStream is = resources[i].getInputStream();
byte[] encoded = ByteArray(is);
String content = new String(encoded, Charset.forName("UTF-8"));
}
}
} catch (IOException e) {
throw new UncheckedIOException(e);
}
转载⾃:
在开发环境中,使⽤ File(“classpath:static/files/8k.wav”) 能读取到 File ,结果打包发布后,读取不了。
解决⽅法
InputStream stream = getClass().getClassLoader().getResourceAsStream("static/files/8k.wav");
File targetFile = new File("files/8k.wav");
或通过以下⽅式获取
ClassPathResource resource = new ClassPathResource("static/office_template/word_replace_tpl.docx");
File sourceFile = File();
InputStream fis = InputStream();
参照此博客中的⽅法:
开发⼀个word替换功能时,因替换其中的内容功能需要 word 模版,就把 word_replace_tpl.docx 模版⽂件放到 resources 下
在开发环境中通过下⾯⽅法能读取word_replace_tpl.docx⽂件,但是打成jar包在 linux下运⾏后⽆法到⽂件了
File file = File(ResourceUtils.CLASSPATH_URL_PREFIX + "static/office_template/xxx.docx");
在开发环境运⾏时,会把资源⽂件编译到项⽬\target\classes\static\office_template\xxx.docx ⽬录下,但是打包成jar后,Resource下的⽂件是存在于jar这个⽂件⾥⾯,在磁盘上是没有真实路径存在的,它是位于jar内部的⼀个路径。所以通过File或者Class().getResource("")⽅法⽆法正确获取⽂件。
我们⽤压缩软件打开 jar ⽂件,看看该word模版位于jar内部的路径
怎么解决
1.把该模版⽂件放到jar项⽬外,在项⽬中配置该模版⽂件的绝对路径,不太推荐这种⽅式,可能会忘记配置模版
2.通过 ClassPathResource resource = new ClassPathResource(“static/office_template/word_replace_tpl.docx”);⽅式读取⽤第⼆种⽅式读取jar中的⽂件流
ClassPathResource resource = new ClassPathResource("static/office_template/word_replace_tpl.docx");
File sourceFile = File();
InputStream fis = InputStream();
还要在项⽬l中配置resources情况
<build>
<!-- 定义包含这些资源⽂件,能在jar包中获取这些⽂件 -->
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
<include>**/*.yml</include>
</includes>
<!--是否替换资源中的属性-->
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.*</include>
</includes>
<!--是否替换资源中的属性-->
<filtering>false</filtering>
</resource>
</resources>
</build>
再次发布项⽬,访问功能,测试后已经在服务器上能读取模版⽂件并⽣成出新⽂件了
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论