所以通过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
    
  •