• 技术文章 >Java >java教程

    操作Properties的java代码详解

    Y2JY2J2017-05-16 09:52:57原创556

    本篇文章主要介绍了Java 操作Properties配置文件详解,详细的介绍了Properties和主要方法,有兴趣的可以了解下

    1 简介:

    JDK提供的java.util.Properties类继承自Hashtable类并且实现了Map接口,是使用一种键值对的形式来保存属性集,其中键和值都是字符串类型。

    java.util.Properties类提供了getProperty()和setProperty()方法来操作属性文件,同时使用load()方法和store()方法加载和保存Properties配置文件。

    java.util.ResourceBundle类也提供了读取Properties配置文件的方法,ResourceBundle是一个抽象类

    2.Properties中的主要方法

    1)load(InputStream inStream):该方法可以从.properties属性文件对应的文件数入流中,加载属性列表到Properties类对象中。load有两个方法的重载:load(InputStream inStream)、load(Reader reader),可根据不同的方式来加载属性文件。

    InputStream inStream = TestProperties.class.getClassLoader().getResourceAsStream("demo.properties"); 
    //通过当前类加载器的getResourceAsStream方法获取
    //TestProperties当前类名;TestProperties.class.取得当前对象所属的Class对象; getClassLoader():取得该Class对象的类装载器
    
    InputStream in = ClassLoader.getSystemResourceAsStream("filePath");
    
    InputStream inStream = new FileInputStream(new File("filePath")); //从文件获取
    InputStream in = context.getResourceAsStream("filePath");     //在servlet中,可以通过context来获取InputStream
    InputStream inStream = new URL("path").openStream();            //通过URL来获取

    读取方法如下:

    Properties pro = new Properties();                   //实例化一个Properties对象
    InputStream inStream = new FileInputStream("demo.properties");     //获取属性文件的文件输入流
    pro.load(nStream);
    inStream.close();

    2)store(OutputStream out,String comments):这个方法将Properties类对象的属性列表写入.properties配置文件。如下:

    FileOutputStream outStream = new FileOutputStream("demo.properties");
    pro.store(outStream,"Comment");
    outStream.close();

    3 ResourceBundle中的主要方法

    通过ResourceBundle.getBundle()静态方法来获取,此方法获取properties属性文件不需要加.properties后缀名。也可以从InputStream中获取ResourceBundle对象。

    ResourceBundle resource = ResourceBundle.getBundle("com/xiang/demo");//emo为属性文件名,放在包com.xiang下,如果是放在src下,直接用test即可 
    ResourceBundle resource1 = new PropertyResourceBundle(inStream);  
    String value = resource.getString("name");

    在使用中遇到的问题可能是配置文件的路径,当配置文件不在当前类所在的包下,则需要使用包名限定;若属性文件在src根目录下,则直接使用demo.properties或demo即可。

    4 Properties操作实例

    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.Map;
    import java.util.Properties;
    
    /**
     * Java中Preperties配置文件工具类
     * @author shu
     *
     */
    public class PropsUtil {
      private String path = "";
      private Properties properties ;
      
      /**
       * 默认构造函数
       */
      public PropsUtil() {}
      
      /**
       * 构造函数
       * @param path 传入Properties地址值
       */
      public PropsUtil(String path) {
        this.path = path;
      }
      
      /**
       * 加载properties文件
       * @return 返回读取到的properties对象
       */
      public Properties loadProps(){
        InputStream inStream = ClassLoader.getSystemResourceAsStream(path);    
        try {
          if(inStream==null)
            throw new FileNotFoundException(path + " file is not found");
          properties = new Properties();
          properties.load(inStream);
          inStream.close();
        } catch (IOException e) {
          e.printStackTrace();
        }
        return properties;
      }
      
      /**
       * 将配置写入到文件
       */
      public void writeFile(){
        // 获取文件输出流
        try {
          FileOutputStream outputStream = new FileOutputStream( new File(ClassLoader.getSystemResource(path).toURI()));
          properties.store(outputStream, null);
          outputStream.close();
        } catch (Exception e) {
          // TODO Auto-generated catch block
          e.printStackTrace();
        }
      }
      
      /**
       * 通过关键字获取值
       * @param key
       * @return 返回对应的字符串,如果无,返回null
       */
      public String getValueByKey(String key) {
        if(properties==null)
          properties = loadProps();
        String val = properties.getProperty(key.trim());
        return val;
      }
      
      /**
       * 通过关键字获取值
       * @param key 需要获取的关键字
       * @param defaultValue 若找不到对应的关键字时返回的值
       * @return 返回找到的字符串
       */
      public String getValueByKey(String key,String defaultValue){
        if(properties==null)
          properties = loadProps();
        return properties.getProperty(key, defaultValue);
      }
      
      /**
       * 获取Properties所有的值
       * @return 返回Properties的键值对
       */
      public Map<String, String> getAllProperties() {
        if(properties==null)
          properties = loadProps();
        Map<String, String> map = new HashMap<String, String>();
        // 获取所有的键值
        Iterator<String> it=properties.stringPropertyNames().iterator();
        while(it.hasNext()){
          String key=it.next();
          map.put(key, properties.getProperty(key));
        }
        /*Enumeration enumeration = properties.propertyNames();
        while (enumeration.hasMoreElements()) {
          String key = (String) enumeration.nextElement();
          String value = getValueByKey(key);
          map.put(key, value);
        }*/
        return map;
      }
    
      /**
       * 往Properties写入新的键值且保存
       * @param key 对应的键
       * @param value 对应的值
       */
      public void addProperties(String key, String value) {
        if(properties==null)
          properties = loadProps();
        properties.setProperty(key, value);
        try {
          writeFile();
        } catch (Exception e) {
          throw new RuntimeException("write fail");
        }
      }
      
      /**
       * 更新配置文件
       * @param key 对应的键
       * @param value 对应的值
       */
       public void update(String key,String value){
         if(properties==null)
          properties = loadProps();
         if(properties.containsKey(key))
           properties.replace(key, value);
        try {
          writeFile();
        } catch (Exception e) {
          throw new RuntimeException("write fail");
        }
       }
       
       /**
       * 刪除某一鍵值对
       * @param key
       */
       public void deleteByKey(String key){
         if(properties==null)
          properties = loadProps();
         if(!properties.containsKey(key))
           throw new RuntimeException("not such key");
         properties.remove(key);
         try {
          writeFile();
         } catch (Exception e) {
          throw new RuntimeException("write fail");
        }
       }
       
       /**
       * 设置path值
       * @param path
       */
       public void setPath(String path){
         this.path = path;
       }
    }

    【相关推荐】

    1. 特别推荐“php程序员工具箱”V0.1版本下载

    2. Java免费视频教程

    3. JAVA教程手册

    以上就是操作Properties的java代码详解的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:详解final、finally和finalize的不同之处 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • 一起来分析java设计模式之单例• Java数据结构之单链表与OJ题• 一文搞懂Java线程池实现原理• Java总结分享之反射、枚举、Lambda表达式• 详细介绍Java正则表达式之单字符匹配和预定义字符
    1/1

    PHP中文网