远方有多远,请你告诉我!

读取Jar包内部资源

Posted on By 赵赵赵小白

起因

通过在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();
}

其它方式