java工程中的相关路径

一、路径

  绝对路径: 指的是文件在系统中的真实路径(物理路径)。
  相对路径: 指的是文件相对某个目录的相对路径。
  对于java application 工程来说,当编写完一个类之后,class文件会编译,默认存放在bin目录中。
存放的目录结构安装包的命名依次存放。同时一些在src目录,或其他Source Fodder目录中的资源文件也会被编译到bin目录中(有些构建的不是存放在bin目录中,这根据构建工具而异)。

  而当程序运行的时候,执行的就是bin目录中的class文件,读取的资源文件也是bin目录中的。
对于java web 工程来说,当编写完一个类之后,class文件默认会被编译到这个web工程下的Webapp目录下的WEB-INF生成的classes目录中。
存放的目录结构安装包的命名依次存放。同样一些在src目录,或其他Source Fodder目录中的资源文件也会被编译到classes目录中。

  而我们对路径的操作基本上是基于class文件所在的目录进行的。

二、示例

  1、通过class 与 ClassLoader获取路径

 1     //testapp为工程名称
 2     // 返回编译后的class-path路径 
 3     //路径:    /D:/web-create/testapp/target/classes/
 4     System.out.println(Thread.currentThread().getContextClassLoader().getResource("").getPath()); 
 5     //路径:    /D:/web-create/testapp/target/classes/com                 此处的com目录必须要存在,否则会抛异常
 6     System.out.println(ClassLoader.getSystemResource("com").getPath());                
 7     //路径: /D:/web-create/testapp/target/classes/                    编译代码后的classes路径             
 8     System.out.println(ClassLoader.getSystemResource("").getPath());     
 9     //路径:    /D:/web-create/testapp/target/classes/                  编译代码后的classes路径 
10     System.out.println(Test.class.getResource("/").getPath());            
11     //路径: /D:/web-create/testapp/target/classes/com/                Test.class文件所在路径 
12     System.out.println(Test.class.getResource("").getPath());            
13     //路径: /D:/web-create/testapp/target/classes/com/Test.class    Test.class文件全路径
14     System.out.println(Test.class.getResource("Test.class").getPath()); 

  2、webapp中通过request,session等获取路径

 1     HttpServletRequest request = null;
 2     ///返回web应用名称:         testapp    
 3     System.out.println(request.getContextPath());
 4     
 5     // 当前web应用的绝对路径(后面没有)   E:/web-create	estappsrcmain
esourceswebapp
 6     System.out.println(request.getSession().getServletContext().getRealPath(""));
 7 
 8     // 当前web应用的绝对路径(后面有)     E:/web-create	estappsrcmain
esourceswebapp
 9     System.out.println(request.getSession().getServletContext().getRealPath("/"));        
10     
11     // 当前web应用中指定目录绝对路径         E:/web-create	estappsrcmain
esourceswebapp
esourceimage  
12     System.out.println(request.getSession().getServletContext().getRealPath("/resource/image")); 
13 
14     //获取PATH目录下的子目录以集合的形式返回():[/resource/image/2015/]
15     System.out.println(request.getSession().getServletContext().getResourcePaths("/resource/image"));
16 
17     // 当前web应用中指定目录绝对路径         E:/web-create	estappsrcmain
esourceswebapp
esourceimage
18     System.out.println(request.getRealPath("/resource/image"));// 不建议使用,用 ServletContext.getRealPath()方法代替

  3、文件相关路径

    //路径: D:   工程所在根目录
    System.out.println(new File("/").getAbsolutePath());      
    //路径: D:web-create	estappcom
    System.out.println(new File("com").getAbsolutePath());  
    //路径:D:web-create	estapp 
    System.out.println(new File("").getAbsolutePath());      
    //路径:D:web-create	estapp
    System.out.println(System.getProperty("user.dir"));  
    // class path 路径
    System.out.println(System.getProperty("java.class.path")); 

  4、加载src(实际上是bin目录或classes目录下的)下的properties

 1     //加载文件相关
 2     InputStream is = new FileInputStream(ClassLoader.getSystemResource("").getPath() + "config.redis.pool.properties");//该种方式与下面得到的结果一致
 3     is = Test.class.getResourceAsStream("config.redis.pool.properties");//与下面结果一样
 4     is = Test.class.getResourceAsStream("/config.redis.pool.properties");
 5     //InputStream is = Test.class.getResourceAsStream("/com/config.redis.pool.properties");//参数是相对于classes目录下的文件全路径
 6     Properties properties = new Properties();
 7     properties.load(is);
 8     is.close();
 9     for(Object obj :properties.keySet()){
10         System.out.println("key: " + obj + " value: " + properties.get(obj));
11     }  
原文地址:https://www.cnblogs.com/always-online/p/4284112.html