getResourceAsStream

getResourceAsStream的解析2010-04-30 14:00  


 

package  cn.com.TestXml;

import  java.io.IOException;

import  java.io.InputStream;

import  java.util.Properties;

 

public   class  TestStructs {

InputStream  in  = getClass().getResourceAsStream( "prop.properties" );

public   static   void  main(String[] args){

TestStructs ts =  new  TestStructs();

Properties pro =  new  Properties();

try  {

pro.load(ts.in);

catch  (IOException e) {

 

   e.printStackTrace();

}

String str = pro.getProperty( "username" );

System.out.println(str);

if (ts.in !=  null )

System.out.println( "wo zhao dao le " );

else

System.out.println( "我找不到文件啊" );

 

 

}

}我用的是eclipse

 

首先说明:prop.properties放在工程目录下!!然后用( "prop.properties" )测试 异常。然后用( "/prop.properties" );通过!

可以说明

 

/ 代表的是工程目录。也就是说有了/ 就会先在工程目录找。如果把 prop.properties放在工程下令一个包例如 cn.com.node 那么路径就相应为/cn/com/node/prop.properties.也就是说可以跨目录读取文件。但前提是有/

 

如果路径为“prop.properties” 那么就必须将prop.properties放在类的同一包里 。在使用Class.getResourceAsStream 时, 资源路径有两种方式, 一种以 / 开头,则这样的路径是指定绝对

路径, 如果不以 / 开头, 则路径是相对与这个class所在的包的。

 

在使用ClassLoader.getResourceAsStream时, 路径直接使用相对于classpath的绝对路径。

 

还有一些我摘自其他人的:

 

老兄和我犯的错误是一样的:   

要区分Class的getResourceAsStream和ClassLoader的getResourceAsStream方法。   

ClassLoader的该方法如果name以/开头那么就什么也找不到了。   

 

而Class的getResourceAsStream方法如果name以/开头那么就把/以后的name传递给ClassLoader的   

getResourceAsStream方法。如果不已/开头那么将该class的包名加上name作为参数(用/代替.)之后   

传给ClassLoader的对应方法。   

 

看一下程序:   

package    com.test;   

import    java.io.*;   

 

public     class    UseResourceTest   {   

public     static     void    main(String[]   args)    throws    Exception   {   

UseResourceTest   test   =    new    UseResourceTest();   

InputStream   in   =   test.getClass().getResourceAsStream( "a.txt" );   

System. out .println(in);   

}   

}   

效果相当于:   

package    com.test;   

import    java.io.*;   

 

public     class    UseResourceTest   {   

public     static     void    main(String[]   args)    throws    Exception   {   

InputStream   in   =   ClassLoader.getSystemClassLoader().getResourceAsStream( "com/test/a.txt" );   

System.out.println(in);    

 

 

 

 

读取属性文件事例:

import  java.io.IOException;

import  java.util.Properties;

/**

  *   读取属性文件

  *

  */

public   class  CSTConfig {

private  Properties  p  =  null ;

public  CSTConfig(){

}

public  Properties load(Class<?> clazz,String propertiesName){

if ( null  ==  p ){

p  =  new  Properties();

}

try  {

p .load(clazz.getResourceAsStream(propertiesName));

catch  (IOException e) {

e.printStackTrace();

}

return   p ;

}

public  String getProperty(String key){

if ( null  ==  p )

return   null ;

return   p .getProperty(key);

}

}


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值