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);
    }

以上就是获取类路径下的资源的两种方式

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值