所以通过src下的某个类获得类装载器对象后,即可获取
src
下任意文件的
URL
;
// 获取当类的类装载器 DB是你当前类的类名
ClassLoader loader = DB.class.getClassLoader();
// 获取文件的绝地位置
URL resource = loader.getResource("jdbc.properties");
// 获取文件路径
String path = resource.getPath();
// 获取当前servlet的ServletContext
ServletContext servletContext = this.getServletConfig().getServletContext();
// 获取当前servlet文件所在的工作目录
String work_dir = servletContext.getRealPath("/");
// 以文件对象来,根据当前servlet的路径向上查找父目录,找到项目目录所在位置
File root_file = new File(work_dir).getParentFile().getParentFile().getParentFile();
// 获取项目目录的绝对路径
String root_dir = root_file.getAbsolutePath();
// 根据项目目录的绝对路径,拼接子目录
String base_dir = root_dir.concat("web");
方式三:通过当前线程获取
假设当前的工程结构如下src
|__main
|__java
| |__com
| |__langkye
| |__Application.java
|__resources
|__template
| |__index.html
|__application.yaml
使用案例//获取 application.yaml 绝对路径
Thread.currentThread().getContextClassLoader().getResource("application.yaml").getPath()
//获取 index.html 绝对路径
Thread.currentThread().getContextClassLoader().getResource("template/index.html").getPath()
//获取 Application.java 绝对路径
Thread.currentThread().getContextClassLoader().getResource("com/langkye/Application.java").getPath()
获取web项目中文件在服务器中的真实路径,项目部署后src中的文件被编译后会被放到web/WEB-INF/classes/下
ServletContext servletContext = request.getServletContext();
// web下的a.properties
String a = servletContext.getRealPath("/a.properties"); // .../web/a.properties
// web/WEB-INF下的b.properties
String b = servletContext.getRealPath("/WEB-INF/b.properties"); // .../web/WEB-INF/b.properties
// src下的c.properties
String c = servletContext.getRealPath("/WEB-INF/classes/c.properties"); // .../web/WEB-INF/classes/c.properties