`
lj830723
  • 浏览: 131824 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Properties资源文件类总结

    博客分类:
  • java
 
阅读更多
平时的开发中可能会遇到对资源文件操作的情况,平时对资源文件类进行了一下总结:
1、Properties 类表示了一个持久的属性集。Properties 可保存在流中或从流中加载。属性列表中每个键及其对应值都是一个字符串。

一个属性列表可包含另一个属性列表作为它的“默认值”;如果未能在原有的属性列表中搜索到属性键,则搜索第二个属性列表。

因为 Properties 继承于 Hashtable,所以可对 Properties 对象应用 put 和 putAll 方法。但强烈反对使用这两个方法,因为它们允许调用方插入其键或值不是 Strings 的项。相反,应该使用 setProperty 方法。如果在“有危险”的 Properties 对象(即包含非 String 的键或值)上调用 store 或 save 方法,则该调用将失败。

load 和 store 方法按下面所指定的、简单的面向行的格式加载和存储属性。此格式使用 ISO 8859-1 字符编码。可以使用 Unicode 转义符来编写此编码中无法直接表示的字符;转义序列中只允许单个 'u' 字符。可使用 native2ascii 工具对属性文件和其他字符编码进行相互转换。

loadFromXML(InputStream) 和 storeToXML(OutputStream, String, String) 方法按简单的 XML 格式加载和存储属性。默认使用 UTF-8 字符编码,但如果需要,可以指定某种特定的编码。XML 属性文档具有以下 DOCTYPE 声明:

<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
注意,导入或导出属性时不 访问系统 URI (http://java.sun.com/dtd/properties.dtd);该系统 URI 仅作为一个惟一标识 DTD 的字符串:
<?xml version="1.0" encoding="UTF-8"?>

    <!-- DTD for properties -->

    <!ELEMENT properties ( comment?, entry* ) >

    <!ATTLIST properties version CDATA #FIXED "1.0">

    <!ELEMENT comment (#PCDATA) >

    <!ELEMENT entry (#PCDATA) >

    <!ATTLIST entry key CDATA #REQUIRED>

    
2、以上文字摘自官方API文档,现对Properties类的几个常用方法进行介绍:
(1)String getProperty(String key)
用指定的键在此属性列表中搜索属性。如果在此属性列表中未找到该键,则接着递归检查默认属性列表及其默认值。如果未找到属性,则此方法返回 null。
(2)String getProperty(String key, String defaultValue)
用指定的键在属性列表中搜索属性。如果在属性列表中未找到该键,则接着递归检查默认属性列表及其默认值。如果未找到属性,则此方法返回默认值变量。
(3)void list(PrintStream out)
将属性列表输出到指定的输出流
(4)void list(PrintWriter out)
将属性列表输出到指定的输出流。
(5)void load(InputStream inStream)
从输入流中读取属性列表(键和元素对)。
(6)Enumeration<?> propertyNames()
返回属性列表中所有键的枚举,如果在主属性列表中未找到同名的键,则包括默认属性列表中不同的键。
(7)Object setProperty(String key,String value)
调用 Hashtable 的方法 put。使用 getProperty 方法提供并行性。强制要求为属性的键和值使用字符串。返回值是 Hashtable 调用 put 的结果。
(8)void store(OutputStream out,String comments)
以适合使用 load 方法加载到 Properties 表中的格式,将此 Properties 表中的属性列表(键和元素对)写入输出流。
(9)loadFromXML(InputStream in)
将指定输入流中由 XML 文档所表示的所有属性加载到此属性表中。
详细介绍请查阅相关资料。

3、以下是我总结的资源文件工具类
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.util.ArrayList;
 import java.util.Enumeration;
 import java.util.List;
 import java.util.Properties;

/**
 * 通用资源文件解析类.
 * Universal resource file parsing class.
 * 
 * @author Hetal
 * 
 */
 public class ReadProperties {
 private Properties pro = null;
 private InputStream in = null;
 private String proValue = "";

 /**
 * 根据资源文件所在路径和key获取value,用于获取资源文件中指定key的value值。
 * Resource files are located under the path and key for value
 *
 * @param proPath
 * @param proKey
 * @return
 */
 public String getPropertiesValue(String proPath, String proKey){
    try {
     pro = new Properties();
     in = ReadProperties.class.getResourceAsStream(proPath);
     pro.load(in);
     proValue = pro.getProperty(proKey);
    } catch (IOException e) {
     e.printStackTrace();
    }
    return proValue;
 }

 /**
 * 获取资源文件的key集合,用户获取资源文件中所有的key。
 * The key for the resource file collection
 *
 * @param proPath
 * @return
 */
 public List<String> getAllKeyList(String proPath) {
    List<String> keyList = new ArrayList<String>();
    try {
     pro = new Properties();
     in = ReadProperties.class.getResourceAsStream(proPath);
     pro.load(in);
     Enumeration<?> keyEnum = pro.propertyNames();
     while(keyEnum.hasMoreElements()){
      keyList.add(keyEnum.nextElement().toString());
     }
    } catch (IOException e) {
     e.printStackTrace();
    }
    return keyList;
 }

 /**
 * 判断传入的key在资源文件中是否已经存在
 *
 * @param proPath
 * @param proKey
 * @return
 */
 public boolean isKeyExist(String proPath, String proKey){
    boolean keyExist = false;
   
    try {
     pro = new Properties();
     in = ReadProperties.class.getResourceAsStream(proPath);
     pro.load(in);
     Enumeration<?> keyEnum = pro.propertyNames();
     while(keyEnum.hasMoreElements()){
      String existKey = keyEnum.nextElement().toString();
      if(proKey.equals(existKey)){
       keyExist = true;
       return keyExist;
      }
     }
    } catch (IOException e) {
     e.printStackTrace();
    }
   
    return keyExist;
 }
 /**
 * 用于向资源文件中写指定key和vlaue的资源信息。
 * Write to the resource file resource information
 *
 * @param proPath 资源文件路径
 * @param proKey 资源名称
 * @param proValue 资源内容
 */
 public void writeProperties(String proPath, String proKey, String proValue) throws Exception{
   
    pro = new Properties();
    in = ReadProperties.class.getResourceAsStream(proPath);
    pro.load(in);
    OutputStream outs = new FileOutputStream(proPath);
    //调用 Hashtable 的方法 put。使用 getProperty 方法提供并行性。强制要求为属性的键和值使用字符串。返回值是 Hashtable 调用 put 的结果。
    pro.setProperty(proKey, proValue);
    //以适合使用 load 方法加载到 Properties 表中的格式,将此 Properties 表中的属性列表(键和元素对)写入输出流
    pro.store(outs, null);
    outs.flush();
   
 }

 /**
 * 根据xml文件路径和key获取value
 * According to access xml file path and key value
 *
 * @param xmlPath xml文件路径
 * @param xmlKey 要获取的key名称
 * @return
 */
 public String getPropertiesFromXML(String xmlPath, String xmlKey){
    try {
     pro = new Properties();
     in = ReadProperties.class.getResourceAsStream(xmlPath);
     pro.loadFromXML(in);
     proValue = pro.getProperty(xmlKey);
    } catch (IOException e) {
     e.printStackTrace();
    }
    return proValue;
 }

 }
分享到:
评论

相关推荐

    java 面试题 总结

    finalize是Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此方法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。 13、sleep() 和 wait() 有什么区别? sleep是线程类(Thread)的...

    springboot知识点整理

    2.4 properties配置文件乱码问题 24 2.5 @ConfigurationProperties与@Value的区别 25 2.6 配置@PropertySource、@ImportResource、@Bean 27 2.7 配置文件占位符 30 2.8 Profile多环境支持 31 2.9 配置文件的加载位置...

    struts自我学习过程程序以及说明

    本资源包括struts的学习程序,能够完全运行,当然,我是完全调试运行出来的,都是源代码原封上传,还有说明文档。还有自我总结资料,放到下一个文件夹当中上传,这里压缩只有这么多了,希望能去下载,那个全部是文档...

    Struts2入门教程(全新完整版)

    2.配置package的资源文件 48 3.app级别的资源文件 48 4.使用资源文件的原理 49 5.选择使用资源文件 49 八、验证机制 50 1.基于手工编码的校验 50 简析校验流程: 53 2.基于XML配置形式的校验 53 九、文件上传下载...

    ARCH4系统开发指南

    2.11.2 主页面用${ctx}方式,引入超链接或资源文件等。 23 2.11.3 主页面用${ctx}方式,引入frame中包含的各个页面。 23 2.12 如何处理代码双击域 24 2.12.1 普通的代码双击域 24 2.12.2 多行输入域中的代码双击域 ...

    ant1.9资源

    若要在外部引入某文件,例如build.properties文件,可以通过如下内容将其引入:” build.properties”/&gt; property元素可用作task的属性值。在task中是通过将属性名放在“${”和“}”之间,并放在task属性值的位置来...

    Eclipse权威开发指南2.pdf

    5.6.4 断开项目与CVS的连接或为项目重分派一个CVS资源库..... 154 5.7 练习概述...... 154 5.8 本章小结...... 155 5.9 参考文献...... 155 第6章 Eclipse环境管理 157 6.1 Eclipse安装实例概览...... 158 6.1.1 ...

    Spring-Reference_zh_CN(Spring中文参考手册)

    velocity.properties 14.4.4.2. FreeMarker 14.4.5. 绑定支持和表单处理 14.4.5.1. 用于绑定的宏 14.4.5.2. 简单绑定 14.4.5.3. 表单输入生成宏 14.4.5.4. 重载HTML转码行为并使你的标签符合XHTML 14.5. XSLT ...

    Spring 2.0 开发参考手册

    容器资源 vs 本地资源 12.2.10. 在应用服务器中使用Hibernate的注意点 12.3. JDO 12.3.1. 建立PersistenceManagerFactory 12.3.2. JdoTemplate和JdoDaoSupport 12.3.3. 基于原生的JDO API实现DAO 12.3.4. ...

    Spring中文帮助文档

    容器资源 vs 本地资源 12.2.10. 在应用服务器中使用Hibernate的注意事项 12.3. JDO 12.3.1. 建立PersistenceManagerFactory 12.3.2. JdoTemplate和JdoDaoSupport 12.3.3. 基于原生的JDO API实现DAO 12.3.4. ...

    Spring API

    容器资源 vs 本地资源 12.2.10. 在应用服务器中使用Hibernate的注意事项 12.3. JDO 12.3.1. 建立PersistenceManagerFactory 12.3.2. JdoTemplate和JdoDaoSupport 12.3.3. 基于原生的JDO API实现DAO 12.3.4. ...

    spring chm文档

    容器资源 vs 本地资源 12.2.10. 在应用服务器中使用Hibernate的注意点 12.3. JDO 12.3.1. 建立PersistenceManagerFactory 12.3.2. JdoTemplate和JdoDaoSupport 12.3.3. 基于原生的JDO API实现DAO 12.3.4. ...

    Maven权威指南 很精典的学习教程,比ANT更好用

    Interpolation of Properties in Dependency Output Location 12.5.4.3. Including and Excluding Dependencies by Scope 12.5.4.4. Fine Tuning: Dependency Includes and Excludes 12.5.4.5. Transitive ...

    ssh(structs,spring,hibernate)框架中的上传下载

     第3~9行定义了一个数据源,其实现类是apache的BasicDataSource,第11~25行定义了Hibernate的会话工厂,会话工厂类用Spring提供的LocalSessionFactoryBean维护,它注入了数据源和资源映射文件,此外还通过一些键值...

    Java JDK 7学习笔记(国内第一本Java 7,前期版本累计销量5万册)

    12.1.5 使用logging.properties 385 12.2 国际化基础、日期 387 12.2.1 关于i18n 387 12.2.2 使用date与dateformat 390 12.2.3 使用calendar 393 12.3 规则表示式 395 12.3.1 定义规则表示式 396 ...

    asp.net知识库

    简单实用的DataSet更新数据库的类+总结 [ADO.NET]由数据库触发器引发的问题 为ASP.NET封装的SQL数据库访问类 DataTable.Select方法的性能问题 .NET 2.0里使用强类型数据创建多层应用 ADO.NET实用经验无保留曝光 有了...

    Eclipse权威开发指南3.pdf

    5.6.4 断开项目与CVS的连接或为项目重分派一个CVS资源库..... 154 5.7 练习概述...... 154 5.8 本章小结...... 155 5.9 参考文献...... 155 第6章 Eclipse环境管理 157 6.1 Eclipse安装实例概览...... ...

    Eclipse权威开发指南1.pdf

    5.6.4 断开项目与CVS的连接或为项目重分派一个CVS资源库..... 154 5.7 练习概述...... 154 5.8 本章小结...... 155 5.9 参考文献...... 155 第6章 Eclipse环境管理 157 6.1 Eclipse安装实例概览...... ...

    Visual.Basic.6大学教程.pdf

    2.6 Properties窗口 21 2.7 菜单栏和工具栏 22 2.8 一个简单的程序:显示一行文本 22 小结 28 自测练习 31 自测练习答案 32 练习 33 第3章 Visual Basic 编程入门 35 3.1 简介 35 3.2 可视化编程和事件驱动编程 35 ...

    【尚硅谷】徐靖博 最新电商项目实战(完结)

    本资源为网传资源,为一套比较全的电商项目,系统架构采用SOA dubbo+EasyI实现,资源过大上传乃是下载链接,如有侵权请联系/留言,不多说下面上目录: 1.01 电商系统介绍2 f% Z/ C0 z% {1 l" q+ R 2.02 电商类型介绍...

Global site tag (gtag.js) - Google Analytics