resourceAsStream

getResourceAsStream的用法

  1. Class.getResourceAsStream(String path):  path 不以’/'开头时默认是从此类所在的包下取资源,以’/'开头则是从ClassPath根下获取。只是通过path构造一个绝对路径,最终由ClassLoader获取资源。
  2.  Class.getClassLoader().getResourceAsStream(String path) :  默认则是从ClassPath根下获取,path不能以’/'开头,最终是由ClassLoader获取资源。
  3. ServletContext.getResourceAsStream(String path):  默认从WebAPP根目录下取资源。 Jsp下的application内置对象就是上面的ServletContext的一种实现。

getResourceAsStream 用法大致有以下几种:

  1.  要加载的文件和.class文件在同一目录下:
    eg:com.x.y 下有类me.class ,同时有资源文myfile.xml。
            me.class.getResourceAsStream("myfile.xml");
  2. 在me.class目录的子目录下:
    eg:  com.x.y 下有类me.class ,同时在 com.x.y.file 目录下有资源文件myfile.xml。
         如下:me.class.getResourceAsStream("file/myfile.xml");
  3. 不在me.class目录下,也不在子目录下 :
    eg:com.x.y 下有类me.class ,同时在 com.x.file 目录下有资源文件myfile.xml。
      如下:me.class.getResourceAsStream("/com/x/file/myfile.xml");

     

总结一下:

第一:前面有 “ / ”: 代表了工程的根目录classpath

me.class.getResourceAsStream("/com/x/file/myfile.xml");

第二:前面没有 “ / ”: 代表当前类的目录
me.class.getResourceAsStream("file/myfile.xml");
 

读取资源文件的方法


/** 使用java.util.Properties类的load()方法 **/
Properties p = new Properties();
p.load(Test.class.getResourceAsStream("pathName"));
p.getProperty("key");

/** 使用java.util.ResourceBundle类的getBundle()方法 **/
ResourceBundle rb = ResourceBundle.getBundle(name, Locale.getDefault()); //根据指定国家/语言环境加载资源文件
String s = bundle.getString("key");

/** 使用java.util.PropertyResourceBundle类的Constructor **/
InputStream in = new BufferedInputStream(new FileInputStream(name));
ResourceBundle rb = new PropertyResourceBundle(in);

/** bufferedReader 的 readLine **/
InputStream resourceAsStream = Test.class.getResourceAsStream("pathName");
InputStreamReader in = new InputStreamReader(resourceAsStream,"utf-8");
BufferedReader fileReader = new BufferedReader(in);
String tempString = fileReader.readLine(); //获取资源文件中的每行数据

 

java.util.ResourceBundle

        这个类的作用就是读取资源属性文件(.properties),然后根据.properties文件的名称信息(本地化信息),匹配当前系统的国别语言信息(也可以程序指定),然后获取相应的properties文件的内容。

        properties文件名字一般的命名规范是:自定义名_语言代码_国别代码.properties,默认为:自定义名.properties。没有提供语言和地区的资源文件是系统默认的资源文件。

eg:myres_en_US.properties 、myres_zh_CN.properties 、myres.properties

当在中文操作系统下,如果myres_zh_CN.properties、myres.properties两个文件都存在,则优先会使用myres_zh_CN.properties,当myres_zh_CN.properties不存在时候,会使用默认的myres.properties。

public class TestResourceBundle { 
   public static void main(String[] args) { 
           Locale locale1 = new Locale("zh", "CN"); 
           ResourceBundle resb1 = ResourceBundle.getBundle("myres", locale1); 
           System.out.println(resb1.getString("aaa")); 

           ResourceBundle resb2 = ResourceBundle.getBundle("myres", Locale.getDefault()); 
           System.out.println(resb1.getString("aaa")); 

           Locale locale3 = new Locale("en", "US"); 
           ResourceBundle resb3 = ResourceBundle.getBundle("myres", locale3); 
           System.out.println(resb3.getString("aaa")); 
   } 
}

 

转载于:https://my.oschina.net/u/3434392/blog/915824

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值