加入收藏 | 设为首页 | 会员中心 | 我要投稿 辽源站长网 (https://www.0437zz.com/)- 云专线、云连接、智能数据、边缘计算、数据安全!
当前位置: 首页 > 运营中心 > 建站资源 > 优化 > 正文

深入浅出的分析 Properties

发布时间:2019-11-12 14:17:08 所属栏目:优化 来源:炸鸡可乐
导读:最近在看 java 集合源码的时候,发现原来我们经常使用的 Properties 类既然继承自 Hashtable!又涨见识了! 01. 摘要 在集合系列的第一章,咱们了解到,Map 的实现类有 HashMap、LinkedHashMap、TreeMap、IdentityHashMap、WeakHashMap、Hashtable、Properti

方法如下:

  1. Properties prop = new Properties(); 
  2. //加载配置文件 
  3. InputStream in = TestProperties.class.getClassLoader().getResourceAsStream("custom.properties"); 
  4. //读取配置文件 
  5. prop.load(new InputStreamReader(in, "UTF-8")); 
  6. System.out.println("userName:"+prop.getProperty("userName")); 

输出结果:

userName:李三

使用ClassLoader类的getSystemResourceAsStream方法获取

和上面类似,也是通过类加载器来获取文件流,方法如下:

Properties prop = new Properties();//加载配置文件InputStream in = ClassLoader.getSystemResourceAsStream("custom.properties");//读取配置文件prop.load(new InputStreamReader(in, "UTF-8"));System.out.println("userName:"+prop.getProperty("userName"));

输出结果:

userName:李三

使用 ResourceBundle 类加载文件

ResourceBundle 类加载文件,与 Properties 有所不同,ResourceBundle 获取 properties 文件不需要加.properties后缀名,只需要文件名即可。

ResourceBundle 是按照iso8859编码格式来读取原属性文件,如果是读取中文内容,需要进行转码处理。

方法如下:

  1. //加载custom配置文件,不需要加`.properties`后缀名 
  2. ResourceBundle resource = ResourceBundle.getBundle("custom"); 
  3. //转码处理,解决读取中文内容乱码问题 
  4. String value = new String(resource.getString("userName").getBytes("ISO-8859-1"),"UTF-8"); 
  5. System.out.println("userName:"+value); 

输出结果:

userName:李三

04. 总结

从源码上可以看出,Properties 继承自 Hashtable,大部分方法都复用于 Hashtable,与 Hashtable 不同的是, Properties 中的 key 和 value 都是字符串。

实际开发中,Properties 主要用于读取配置文件,尤其是在不同的环境下,变量值需要不一样的情况,可以通过读取配置文件来避免将变量值写死在 java 的枚举类中,以达到一行代码,多处运行的目的!

在读取 Properties 配置文件的时候,容易因文件路径找不到报错,可以参考 properties 文件加载的几种方式,

(编辑:辽源站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读