记录一个坑,公司中有个业务需求要获取 resources 下的配置文件中的配信息。正常编码时通过
String filePath = XXX.class.getClassLoader().getResource("xxx.xx").getPath();
File f = new File(filePath)
是可以正常获取到文件的但是打成 jar 包后就获取不到了。原因是打成 jar 后资源在 jar(jar本身也是一种压缩文件格式)文件内中。Java 没法直接获取到 jar 中的文件。必须通过流的方式获取 jar 中的文件,而不能通过 File 的形式。
以下是正确代码。
try (InputStream resourceAsStream = ParseJsonUtil.class.getClassLoader().getResourceAsStream("文件名")) {
// IOUtils 是 apache 中的一个类可以将 input 流转换为 String
// import org.apache.commons.io.IOUtils;
String content = IOUtils.toString(resourceAsStream);
}catch (Exception e) {
e.printStackTrace();
log.info("readFileToString" + e.getMessage());
}