操作Properties的java代码详解

本篇文章主要介绍了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来获取InputStreamInputStream 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;   }}

不能接受失败,也意味太想去成功了,从心理学上解释,

操作Properties的java代码详解

相关文章:

你感兴趣的文章:

标签云: