欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

解决springboot读取jar包中文件的问题

程序员文章站 2022-03-02 21:03:43
...

前言

我们这边有一个需求如下:

  • 有一个模板文件,有占位符,在添加产品的时候,将占位符中内容替换成相应的产品信息并生成文件。
    在项目中使用的是springboot,在本地读取文件因为不是以jar包的方式访问,所以可以读取到文件内容,而在服务器上以jar的形式读取,所以读取的文件内容为空。
    先贴上代码
private static String readScript(String filePath){
    File file=new File(filePath);
    Long fileLength=file.length();
    byte[] fileContext=new byte[fileLength.intValue()];
    try {
        FileInputStream in=new FileInputStream(filePath);
        in.read(fileContext);
        in.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return new String(fileContext);
}

这样读到文件路径为:

file:/home/build/admin/rampage-admin-web-0.1.0-SNAPSHOT-exec.jar!/BOOT-INF/classes!/templates/script.ftl

但是文件内容为空,并没有报错异常信息。后来百度后改为

private static String readScript(File file){
    Long fileLength=file.length();
    byte[] fileContext=new byte[fileLength.intValue()];
    try {
        FileInputStream in=new FileInputStream(file);
        in.read(fileContext);
        in.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return new String(fileContext);
}

参数File 的值如下:

InputStream stream = getClass().getClassLoader().getResourceAsStream("templates/script.ftl");
File targetFile = new File("script.ftl");
FileUtils.copyInputStreamToFile(stream, targetFile);

此处targetFile即为参数