读书人

相对路径-初记

发布时间: 2012-10-06 17:34:01 作者: rapoo

相对路径-小记
JAVA编程中许多地方都需要编写文件的路径,比如:
1.根据路径获取文件对象 File f = new File(path);
2.根据路径获取文件输入流 InputStream is = new FileInputStream(path);
在JAVA APPLICATION中,路径问题有些要注意的地方:

目录结构:
项目路径:
E:\workSpace\MyProject
测试类源文件路径
E:\workSpace\MyProject\src\testPackage\Test.java
(class在bin路径中,非src)

1.相对路径[""]是工程根目录MyProject
System.out.println(new File("").getAbsolutePath());
//===>E:\workSpace\MyProject\
2.相对路径[/]是磁盘驱动器路径
System.out.println(new File("/").getAbsolutePath());
//===>E:\

由此可见,这种方式下,系统根据路径去搜寻文件时不太方便,
有时候我们希望直接从当前类文件所属的目录下或者从classpath中直接搜寻文件
此时要用到Class类的实例方法-getResource(path),如下:

1.相对路径[""]返回class类文件所属的当前目录
URL url = Test.class.getResource("");
System.out.println(url.getPath());
//===>E:\workSpace\MyProject\bin\testPackage\
2.相对路径[/]返回classpath路径即默认为bin路径
URL url = Test.class.getResource("/");
System.out.println(url.getPath());
//===>E:\workSpace\MyProject\bin\

了解了getResource(path)的用法后,使用getResourceAsStream(path)就很轻松了
不同之处在于:getResource返回URL对象,
而getResourceAsStream返回输入流InputStream

由此可见,同样是[/],但不同的用法,搜寻到的路径是不同的,联想到WEB应用程序中,
相对访问路径URL中的[/]也是有两种用法,一般情况是:
各户端的[/]代表访问的主机地址[http://host:port/]
服务器端的[/]代表访问的应用程序根目录[http://host:port/webapp/]

-----------------------------------------------------续
在WEB应用中获取Spring的ApplicationContext
ClassPathXmlApplicationContext("filepath")默认在classpath中查找文件,以下前三种方式均为在classpath中搜寻配置文件,第4种使用绝对路径
1)ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:../applicationContext.xml");
2)ApplicationContext ctx = new ClassPathXmlApplicationContext("../applicationContext.xml");
3)ApplicationContext ctx = new ClassPathXmlApplicationContext("/../applicationContext.xml");
4)ApplicationContext ctx = new ClassPathXmlApplicationContext("file:F:../applicationContext.xml");

----------可使用SPRING的WebApplicationContextUtils的getWebApplicationContext(ServletContext sc)来方便的获取WebApplicationContext,如在struts2中,
ApplicationContext ctx = WebApplicationContextUtils.getWebApplicationContext(ServletActionContext.getServletContext());

读书人网 >编程

热点推荐