Servlet读取文件方式总结

Servlet获取资源文件的方式总结

最近在学习JavaWeb,同时也因为ServletContext获取资源文件的方式而苦恼,
一个最直截了当的问题就是:为什么方式有这么多?太容易弄混了!

确实,看了视频教程之后,首先感觉到在Web工程中想要获取资源文件信息和普通的Java工程是不一样的,因为这是在Web工程而不是Java工程,即使我们的文件放在src下,但是,真正的相对路径不是在src下,真正的绝对路径也不是在Java工作空间中。由于我们的Web工程是寄托在Tomcat中来运行,所以运行的路径是在Tomcat项目目录下的classes中,故这也是本人为什么要总结的原因!以下为重点:

  • ServletContext - 普通方式读取工程文件

    • 首先,如果我们在EclipseWeb项目中src目录下,新建一个properties配置文件,并写上信息,若要读取,最原始方法是的使用Properties加载FileInputStream(PS:这也是我们学JavaSE所通常使用的方法)但是这种方法有以下注意点及局限性:
    1. 实例化InputStream的代码过于啰嗦,文件路径太长(不是相对路径)
    2. 以下为该方法的代码:
      Properties properties = new Properties();
      InputStream is = new FileInputStream("D:/apache-tomcat-7.0.77/wtpwebapps/Servlet/WEB-INF/classes/peizhi.properties");
      properties.load(is);
      String name = properties.getProperty("name");	//这里以获取name为例
      System.out.println("name="+name);
      
  • ServletContext - 获取资源文件(一)

    • 该方法比上面的方法方便,仍然是Properties加载InputStream来实现,还加入了ServletContext对象来获取InputStream,就不用像上面那样填写复杂的路径了,这种方法有以下注意点:
    1. 使用到了ServletContext的getRealPath(“WEB-INF/classes/peizhi.properties”);
    2. 该方法指向的目录为:项目工程名的目录下
    3. 所以路径为:WEB-INF/classes/peizhi.properties
    4. 以下为该方法的代码:
      Properties properties = new Properties();
      ServletContext sc = getServletContext();
      InputStream is = null;
      String path = sc.getRealPath("WEB-INF/classes/peizhi.properties");
      //System.out.println("path="+path);
      is = new FileInputStream(path);
      properties.load(is);
      String name = properties.getProperty("name");
      System.out.println("name="+name);
      
  • ServletContext - 获取资源文件(二)

    • 该方法比第一种方法方便(和第二种类似),这种方法有以下注意点:
    1. 使用到了ServletContext的getResourceAsStream方法
    2. getResourceAsStream方法指向的目录在Tomcat的根目录工程下,即wtpwebapps\项目工程名
    3. 所以路径为:WEB-INF/classes/peizhi.properties
    4. 以下为该方法的代码:
      ServletContext sc = getServletContext();
      Properties properties = new Properties();
      InputStream is = null;
      is = sc.getResourceAsStream("WEB-INF/classes/peizhi.properties");
      properties.load(is);
      String name = properties.getProperty("name");
      System.out.println("name="+name);
      
  • ServletContext - 使用ClassLoader获取资源文件

    • 该方法与上面的两种方法类似,也是使用properties与InputStream,只不过是使用ClassLoader来完成
    1. this.getClass().getResourceAsStream("…/name.properties");指向:classes\Servlet
    2. this.gerClass().getClassLoader().getResourceAsStream(“name
      .properties”);指向:classes
    3. 以下为该方法的代码:
      Properties properties = new Properties();
      InputStream is = null;
      is = this.getClass().getClassLoader().getResourceAsStream("peizhi.properties");
      properties.load(is);
      String name = properties.getProperty("name");
      System.out.println("name="+name);
      

    最后:本人为大二菜鸡一枚,希望对一些和我一样学习Web有疑惑的同学有所帮助。PS:第一次写博客,竟然写了近两个小时!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hillain

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值