一、路径
绝对路径: 指的是文件在系统中的真实路径(物理路径)。
相对路径: 指的是文件相对某个目录的相对路径。
对于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\testapp\src\main\resources\webapp 6 System.out.println(request.getSession().getServletContext().getRealPath("")); 7 8 // 当前web应用的绝对路径(后面有\) E:/web-create\testapp\src\main\resources\webapp\ 9 System.out.println(request.getSession().getServletContext().getRealPath("/")); 10 11 // 当前web应用中指定目录绝对路径 E:/web-create\testapp\src\main\resources\webapp\resource\image 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\testapp\src\main\resources\webapp\resource\image 18 System.out.println(request.getRealPath("/resource/image"));// 不建议使用,用 ServletContext.getRealPath()方法代替
3、文件相关路径
//路径: D:\ 工程所在根目录 System.out.println(new File("/").getAbsolutePath()); //路径: D:\web-create\testapp\com System.out.println(new File("com").getAbsolutePath()); //路径:D:\web-create\testapp System.out.println(new File("").getAbsolutePath()); //路径:D:\web-create\testapp 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 }