文件结构
源文件结构
目标文件结构
获取类路径
注意:
如果前端上传的一些图片(比如logo等)需要存储在static目录下的话,存在源文件的static目录下是没用的,需要存储在对应target的static目录下前端才能实时读取。
方法一:
import org.springframework.util.ClassUtils;
String path1 = ClassUtils.getDefaultClassLoader().getResource("").getPath();
System.err.println("我是你爹:"+path1);
可见获取的是target中的class文件路径。
方法二:
ClassLoader classLoader = ExportUtil.class.getClassLoader();
URL resource = classLoader.getResource("/");
String path = resource.getPath();
原文件的结构:
获取路径:
需要注意的情况:
B项目的结构:
A项目、B项目在本地都能独立运行,且A项目引入了B打成的jar包。
方式一:
String path = OmmlUtils.class.getClassLoader().getResource("omml2mml.xsl").getPath();
if(path.matches("^(?i)(file)[\\s\\S]*")){ // 从A项目中触发依赖B的方法,获取到的路径:file:/D:/......
// 直接使用file:开头的路径会报错误:Illegal char <:> at index 4: file:/D:/xdocreport-xdocreport
path = path.substring(6);
}else{ // B项目自身调用获取到的路劲:/D:/......
// 直接使用找不到文件
path = path.substring(1);
}
Files.newInputStream(Paths.get(path))
结果:
仅在B项目中自己调用,成功;
在A项目中使用B依赖调用此方法,失败!提示空指针异常,即:找不到文件。但是查看jar包内部其实是存在此文件的。
方式二:
OmmlUtils.class.getResourceAsStream("/omml2mml.xsl")
结果:
在B项目中自己调用此方法成功;
A项目调用B的依赖,B中获取输入流成功。