Java项目的路径重要有ServletContext、Class、ClassLoader方式
ServletContext:
ServletContext 有三种方法:
(1)getRealPath():获取带盘符的绝对路径
在一个servlet中演示
ServletContext sc=this.getServletContext();
String s1=sc.getRealPath("a.txt");
System.out.println(s1);
输出结果:
D:\apache-tomcat-7.0.42\webapps\day2_1\a.txt
getRealPath()该方法会将传入的参数前面加上项目所在的绝对路径
(2)getResourceAsStream():获取资源流
在项目的根目录下,建立一个a.txt,内容是Hello!
ServletContext sc=this.getServletContext();
InputStream is =sc.getResourceAsStream("a.txt");
System.out.println(IOUtils.toString(is));//这里使用了commons.io.jar包
Hello!
(3)getResourcePaths():输出文件加下的所有资源路径
ServletContext sc=this.getServletContext();
Set<String> s=sc.getResourcePaths("/WEB-INF");
System.out.println(s);
结果:
[/WEB-INF/lib/, /WEB-INF/classes/, /WEB-INF/b.txt, /WEB-INF/web.xml]
ClassLoader
getResourceAsStream()方法
/**
* ClassLoader 查找资源不能使用‘/’
* 相对于classes
* @throws IOException
*/
@Test
public void test1() throws IOException{
ClassLoader cl= Demo1.class.getClassLoader();//得到类加载器
InputStream is=cl.getResourceAsStream("a.txt");//让类加载器到类路径下查找资源
System.out.println(IOUtils.toString(is));
}
Class
/**
* Class相对.class文件的对应目录下
* @throws IOException
*/
@Test
public void test2() throws IOException{
Class c=Demo1.class;
InputStream is=c.getResourceAsStream("a.txt");
System.out.println(IOUtils.toString(is));
}
/**
* Class 加‘/’相对classes文件
* @throws IOException
*/
@Test
public void test3() throws IOException{
Class c=Demo1.class;
InputStream is=c.getResourceAsStream("/a.txt");
System.out.println(IOUtils.toString(is));
}
补充:
1、在src目录下的文件既是发布后文件的classes目录下
2、WebRoot目录就是根目录
3、“..”在路径前面代表对应路径的上一级目录