操作properties属性文件

读取properties属性文件总共有两种方式,ResourceBundle和Properties。下面,说说这两种方式的区别:


1、通过ResourceBundle读取.properties文件可避免路径问题。在jar里读取.properties文件时,总是出现找不到文件路径,后来用ResourceBundle读取.properties文件即可避免路径问题。


2、无论系统的默认编码是什么,ResourceBundle在读取properties文件时统一使用iso8859-1编码。因此,如果在默认编码为 GBK的系统中编写了包含中文的properties文件,经由ResourceBundle读入时,必须转换为GBK格式的编码,否则不能正确识别。


3、Properties的处理方式是将其作为一个映射表,而且这个类表示了一个持久的属性集,他是继承HashTable这个类。


4、ResourceBundle本质上也是一个映射,但是它提供了国际化的功能。所以,一般来说,ResourceBundle类通常是用于针对不同的语言来使用的属性文件。而如果你的应用程序中的属性文件只是一些配置,并不是针对多国语言的目的。那么使用Properties类就可以了。


5、这两个类都是读取properties格式的文件的,而Properties同时还能用来写文件。


ResourceBundle读取properties属性文件

  1. import java.util.ResourceBundle;  
  2.   
  3. /** 
  4.  * @deprecated 读取配置文件信息 
  5.  * @author sunny 
  6.  * 
  7.  */  
  8. public class ConfigInfo {  
  9.     private static ResourceBundle cache = null;  
  10.     static{  
  11.         try {  
  12.             cache = ResourceBundle.getBundle("zlb");  
  13.         } catch (RuntimeException e) {  
  14.             e.printStackTrace();  
  15.         }  
  16.     }  
  17.     public String getValue(String key){  
  18.         return cache.getString(key);  
  19.     }  
  20.     public static void main(String[] agrc){  
  21.           
  22.         System.out.println(new ConfigInfo().getValue("name"));  
  23.         System.out.println(new ConfigInfo().getValue("age"));  
  24.         System.out.println(new ConfigInfo().getValue("sex"));  
  25.     }  
  26. }  

Properties操作属性文件


  1. import java.io.FileInputStream;     
  2. import java.io.FileOutputStream;     
  3. import java.util.Properties;     
  4.   
  5. /** 
  6.  * 访问资源文件 
  7.  * @author sunny 
  8.  * 
  9.  */  
  10. public class PropertyEditor {     
  11.     public static void main(String[] args) throws Exception {     
  12.         Properties prop = new Properties();// 属性集合对象     
  13.         FileInputStream fis = new FileInputStream("prop.properties");// 属性文件输入流   (相对于根目录下的文件名,要加上包名 “src/prop.properties”)  
  14.         prop.load(fis);// 将属性文件流装载到Properties对象中     
  15.         fis.close();// 关闭流     
  16.     
  17.         // 获取属性值,sitename已在文件中定义     
  18.         System.out.println("获取属性值:sitename=" + prop.getProperty("sitename"));     
  19.         // 获取属性值,country未在文件中定义,将在此程序中返回一个默认值,但并不修改属性文件     
  20.         System.out.println("获取属性值:country=" + prop.getProperty("country""中国"));     
  21.     
  22.         // 修改sitename的属性值     
  23.         prop.setProperty("sitename""中国");     
  24.         // 添加一个新的属性studio     
  25.         prop.setProperty("studio""Boxcode Studio");     
  26.         // 文件输出流     
  27.         FileOutputStream fos = new FileOutputStream("prop.properties");     
  28.         // 将Properties集合保存到流中     
  29.         prop.store(fos, "Copyright (c) Boxcode Studio");     
  30.         fos.close();// 关闭流     
  31.     }     
  32. }    


属性文件prop.properties:


sitename=\u4E2D\u56FD
studio=Boxcode Studio
country=china
通过Properties访问属性文件的话,由于I/O的速度比较慢,如果负责读取配置文件的class是在每次用到这些配置项的时候去读文件,就容易成为性能上的瓶颈。为避免这样的情况,可以在初始化的时候就把配置项一次全部读入,并保存在静态成员变量中.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值