JavaWeb——获取类路径下的资源
一、项目结构
1、首先,项目的目录结构大概是这样
二、资源文件存放路径
1、类路径下的资源一般放在 src 下。假如先在src的根目录下新建一个a.txt 文件。
2、实际上a.txt会被加载到:\项目名\out\artifacts\项目扩展名WEB-INF\classes\a.txt (如果是IDEA,路径大概就是这样。当然,如果是其他编译工具帮你生成的路径和这个不一样,也不影响后续的获取)
自动加载后的文件目录
三、获取类路径下的资源方式
1、方式一: ClassLoader
(1)、该方式的路径是相对于/classes,开头没有斜杆的
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//得到ClassLoader 先得到Class,在得到ClassLoader
ClassLoader c1=this.getClass().getClassLoader();
//调用其getResourceAsStream,得到一个InputStream
InputStream input = c1.getResourceAsStream("a.txt");
//读取输入流,转成字符串
String s = IOUtils.toString(input);
//输出
System.out.println(s);
}
如果资源文件不是直接在src下,而是在其他包下面,如:a.txt 在 com/sunlee/test/ 下 ,如图:
那么,只要改成:getResourceAsStream("com/sunlee/test/a.txt") 即可,注意:开头没有斜杆的
代码如下:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//得到ClassLoader 先得到Class,在得到ClassLoader
ClassLoader c1=this.getClass().getClassLoader();
//调用其getResourceAsStream,得到一个InputStream
InputStream input = c1.getResourceAsStream("com/sunlee/test/a.txt");
//读取输入流,转成字符串
String s = IOUtils.toString(input);
System.out.println(s);
}
2、方式二:Class
(1)、该方式是相对于该.class文件所在目录
(2)、注意:src下的java文件会被编译成class文件放在 /classes下
(3)、注意:开头还是没有斜杆的
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//得到Class
Class c = this.getClass();
//相对于当前.class文件所在目录
InputStream input = c.getResourceAsStream("a.txt");
//读取输入流,转成字符串
String s = IOUtils.toString(input);
System.out.println(s);
}
看到这里可能会有疑问:既然相对于.class文件,那如果我的资源文件和.class文件不同目录怎么办?
这种情况下,可修改代码为:getResourceAsStream("/a.txt"); 注意:这里加了一个斜杆,表示相对classes下。没错,如果加了斜杆就和上面classLoader效果一样的了,当然,classLoader是没有前面加斜杆一说的。
代码贴上:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//得到Class
Class c = this.getClass();
//相对于当前.class文件所在目录
InputStream input = c.getResourceAsStream("/a.txt");
//读取输入流,转成字符串
String s = IOUtils.toString(input);
System.out.println(s);
}
以上就是获取类路径下的资源的两种方式