springboot项目中当在类路径(resources目录)下如何获取类路径下某个文件
1 在Controller中获取类路径的写法:
String fileName = "verifierTemplate.xlsx";
String path = this.getClass().getResource("/").getPath()+fileName;
java.lang.Class
public java.net.URL getResource(String name) {
name = resolveName(name);
ClassLoader cl = getClassLoader0();
if (cl==null) {
// A system class.
return ClassLoader.getSystemResource(name);
}
return cl.getResource(name);
}
关于classpath
classpath,指的是编译后的class文件、xml、properties等配置文件所在的目录。比如,如果是maven项目,classpath为"项目名/target/classes",如果是普通项目,可能是”项目名/bin”,或者”项目名/build/classes”等等。
getResource是java.lang.Class的方法,也就是由字节码对象调getResource接受一个字符串参数,如果以"/"开头,就在classpath根目录下找(不会递归查找子目录),如果不以”/”开头,就在调用getResource的字节码对象所在目录下找(同样不会递归查找子目录)
测试
System.out.println("路径一为:"+this.getClass().getResource("").getPath());
System.out.println("路径二为:"+this.getClass().getResource("/").getPath());
说明
this.getClass().getClassLoader().getResource("").getPath()和this.getClass().getResource("/").getPath()得到的结果一样,均为:/D:/workspace/meas/target/classes/ 从源码中可以看到其实在getResource方法中封装了getClassLoader().getResource("")
项目启动后会自动在项目根目录下生成一个target,这里存放编译后的class文件
获取项目根路径
File directory = new File("");// 参数为空
String courseFile = directory.getCanonicalPath();
System.out.println("项目路径为:"+courseFile);
评论区