SpringBoot jar包resource文件内容读取

文章目录

读取springboot jar包文件会出现如下异常

class path resource [mock/listResumeJobVideoCard.json] cannot be resolved to absolute file path because it does not reside in the file system: jar:file:/data/java-camx-live-c/lib/c-1.10.0.RELEASE.jar!/BOOT-INF/classes!/mock/listResumeJobVideoCard.json

java.io.FileNotFoundException: class path resource [mock/listResumeJobVideoCard.json] cannot be resolved to absolute file path because it does not reside in the file system: jar:file:/data/java-camx-live-c/lib/c-1.10.0.RELEASE.jar!/BOOT-INF/classes!/mock/listResumeJobVideoCard.json
	at org.springframework.util.ResourceUtils.getFile(ResourceUtils.java:217)
	at org.springframework.core.io.AbstractFileResolvingResource.getFile(AbstractFileResolvingResource.java:154)
	at com.zhaopin.live.service.JobVideoCardServiceImpl$FileReader.load(JobVideoCardServiceImpl.java:72)
	at com.zhaopin.live.service.JobVideoCardServiceImpl.listResumeJobVideoCard(JobVideoCardServiceImpl.java:56)
	at com.zhaopin.live.service.JobVideoCardServiceImpl$$FastClassBySpringCGLIB$$6c95e52e.invoke(<generated>)
	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:752)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)
	at org.springframework.validation.beanvalidation.MethodValidationInterceptor.invoke(MethodValidationInterceptor.java:119)
	at com.zhaopin.boot.autoconfigure.thrift.validation.ZhaopinMethodValidationInterceptor.invoke(ZhaopinMethodValidationInterceptor.java:37)
	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)
	at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:691)
	at com.zhaopin.live.service.JobVideoCardServiceImpl$$EnhancerBySpringCGLIB$$872fbc57.listResumeJobVideoCard(<generated>)

经过踩坑最终结局问题。

ResourceReader

import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.FileUtils;
import org.springframework.util.ResourceUtils;

import java.io.File;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;

/**
 * Resource 文件内容读取器
 * @author 石冬冬(Chris Suk)
 * @since 2022/10/12 9:57 AM
 */
@Slf4j
public class ResourceReader {
    /**
     * 读取 resources 下文件内容
     * @param resourcePath
     * @return
     */
    public static String read(String resourcePath){
        String data = "";
        try {
            InputStream inputStream = ResourceReader.class.getClassLoader().getResourceAsStream(resourcePath);
            File tmpFile = new File("/tmp/" + resourcePath);
            if (!tmpFile.exists()) {
                FileUtils.copyToFile(inputStream, tmpFile);
            }
            File file = ResourceUtils.getFile(tmpFile.getPath());
            data = FileUtils.readFileToString(file, StandardCharsets.UTF_8);
        } catch (Exception e) {
            log.error("读取文件内容异常", e);
        }
        return data;
    }
}

应用

 public ListResumeVideoCardDTO listResumeJobVideoCard() {
     String data = ResourceReader.read("mock/listResumeJobVideoCard.json");
     return JSON.parseObject(data, ListResumeVideoCardDTO.class);
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值