java中获取资源文件

在开发java程序的过程中,我们经常要获取到资源的路径或者输入流,在java程序中资源的存放位置也是各异的。有的存放在classpath中,有的存放在文件系统中,有的存放在web应用中。而对于不同位置的资源,java程序获取这些资源的方法各有不同。下面让我们来看看常用的获取方式:

  • 获取到Path,当前类的绝对路径;
    加”\”
Thread.currentThread().getContextClassLoader().getResource("students.xml");
File f = new File(this.getClass().getResource("/").getPath()); 
System.out.println(f); 

结果: C:\Documents%20and%20Settings\Administrator\workspace\projectName\bin

如果不加“/”

File f = new File(this.getClass().getResource("").getPath()); 
System.out.println(f); 

结果:

C:\Documents%20and%20Settings\Administrator\workspace\projectName\bin\com\test 
  • 使用相对路径
    使用绝对路径,如果tomcat的路径变化了,那么项目代码就要修改.为了改进这种缺点,要使用相对路径,
    myeclipse中,在src下的文件,最后放在服务器器下面的webapps\MyServlet\WEB-INF 中

    1.获得lib目录下的资源

getServletContext().getRealPath("/WEB-INF/lib/students.xml");
2.获得src下的资源==> 获得classes目录下的资源
getServletContext().getRealPath("/WEB-INF/classes/students.xml");
3.获得com.stroe.servlet.servlet_context包下的资源
getServletContext().getRealPath("/WEB-INF/classes/com/stroe/servlet/servlet_context/students.xml");
4.如果获得的是包上面的这种情况,那么太麻烦了.
    //使用getClass().getResourceAsStream方法,相对路径分为两种情况
            //1: 加"/"  ==> 相对的是classes目录
            //2: 不加"/" ==> 相对的是本类当前目录
        InputStream is = this.getClass().getResourceAsStream("students.xml");
        System.out.println(is);
5.使用this.getClass().getClassLoader().getResourceAsStream("");
    推荐使用这种:只有一个相对路径 ==> 就是相对于 classes目录 
//1.只有一个相对路径 ==> 就是相对于 classes目录
InputStream is2 =   this.getClass().getClassLoader().getResourceAsStream("students.xml");
System.out.println(is2);
    //注意: 使用类和类加载器加载资源文件时
        //1 jvm运行期间只加载一次. 但是使用下面的代码可以解决这个问题.
String path = this.getClass().getClassLoader().getResource("students.xml").getPath();
                File file = new File(path.substring(1, path.length()));
                System.out.println(path);
            //2 getClassLoader()原本是用来加载.class文件的, 所以缓存设计的很小.不要用他加载一些别较大的资源. 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值