文章目录
读取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);
}