原创

springboot 读取文件

示例代码

public class Test {

    public byte[] getFile(String url){

        // 根据路径查询文件
        InputStream inputStream = null;
        try{
            // 先用相对路径进行查询
            inputStream = new FileInputStream(url);
        }catch(FileNotFoundException e){
            // 文件没有发现时,查询相对路径
            inputStream = Test.class.getClassLoader().getResourceAsStream(url);
        }

        // 将文件转换为 byte[]
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024];
        int len;
        try{
            while ((len = inputStream.read(buffer)) > -1) {
                byteArrayOutputStream.write(buffer, 0, len);
            }
        }catch (IOException e){
            e.printStackTrace();
        }finally {
            try {
                inputStream.close();
                byteArrayOutputStream.close();
            }catch (IOException e){
                e.printStackTrace();
            }
        }
        byte[] result = byteArrayOutputStream.toByteArray();

        // 返回数据
        return result;

    }

}

扩展

1、Class.getResourceAsStream(String path)

path 不以 '/' 开头时,默认是从此类所在的包下获取资源
path 以 '/' 开头时,从 classPath(src根目录) 下获取资源

2、Class.getClassLoader.getResourceAsStream(String path)

从 classPath(src根目录) 下获取资源
path 不能以 '/' 开头

3、路径分隔符使用 '/',尽量不要使用 '\'

因为 jar 中不识别 '\'

4、如果 springboot 需要打 jar 部署,需使用 getResourceAsStream 获取项目中的文件

因为 jar 中的资源,有专门的URL形式,如果按照标准的文件资源定位形式:new File(url) 定位文件,会抛出 java.io.FileNotFoundException

// jar url 格式: jar:<url>!/{entry}
// 如:
jar:test.jar!/test/test.xlsx
正文到此结束