起因
通过在ide中通过FileInputStream
读取文件没问题,当打成jar包后就找不到对应路径资源了.
解决办法
这里使用的是FileUtils.class
, 就是在此命名模块中资源都能读到, 把资源放入resources目录中,打成jar包后会看到资源都在最外一层。spring 项目不是,这个可以打成包后自行查看。
读取文件的时候使用readInternal(“/resources中存在的文件名字”) 就能读取到.
具体使用方法需要自行去阅读java.lang.Class#getResourceAsStream
源码或doc, 里边有详细说明。这里仅告诉说有这种功能或操作,具体使用还需要自行探索。
public static String readInternal(String path) {
// 通过 getResourceAsStream 获取内部资源, 这里可以看下jardoc中解释
// InputStream inputStream = ClassLoader.class.getResourceAsStream(path);
InputStream inputStream = FileUtils.class.getResourceAsStream(path);
if (inputStream == null) throw new RuntimeException(StringUtils.format("File not found: {}", new File(path).getAbsoluteFile()));
StringBuilder contentBuilder = new StringBuilder();
try (BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8))) {
String line;
while ((line = reader.readLine()) != null) {
contentBuilder.append(line).append("\n");
}
} catch (IOException e) {
throw new RuntimeException(StringUtils.format("An error occurred while reading the file: {}", e.getMessage()));
}
return contentBuilder.toString();
}