Heim  >  Artikel  >  Java  >  Detaillierte Erläuterung des Java-Codes zum Bedienen von Eigenschaften

Detaillierte Erläuterung des Java-Codes zum Bedienen von Eigenschaften

Y2J
Y2JOriginal
2017-05-16 09:52:571202Durchsuche

In diesem Artikel wird hauptsächlich die Konfigurationsdatei für Java-Operationseigenschaften ausführlich erläutert und die Eigenschaften und Hauptmethoden im Detail vorgestellt.

1 Einführung:

Die von JDK bereitgestellte Klasse java.util.Properties erbt von der Hashtable-Klasse und implementiert die Map-Schnittstelle. Sie verwendet ein Schlüssel-Wert-Paar zum Speichern des Eigenschaftssatzes, wobei Schlüssel und Wert beide Zeichenfolgentypen sind.

Die Klasse java.util.Properties stellt die Methoden getProperty() und setProperty() zum Betreiben von Eigenschaftsdateien bereit, während die Methoden load() und store() zum Laden und Speichern der Eigenschaftenkonfigurationsdatei verwendet werden.

Die Klasse java.util.ResourceBundle stellt auch Methoden zum Lesen der Eigenschaftenkonfigurationsdatei bereit. ResourceBundle ist eine abstrakte Klasse.

2. Hauptmethoden in Eigenschaften

1) Load(InputStream inStream): Diese Methode kann Eigenschaften aus der Datei laden, die der .properties-Eigenschaftendatei entspricht . Auflisten zur EigenschaftenklasseObjekt. Load verfügt über zwei Methoden--Überladungen : Load(InputStream inStream) und Load(Reader-Reader), mit denen Attributdateien auf unterschiedliche Weise geladen werden können.

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来获取

Die Lesemethode ist wie folgt:

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

2) Store (OutputStream out, String comments): Diese Methode schreibt die Eigenschaftenliste des Properties-Klassenobjekts in die . Eigenschaftenkonfigurationsdatei. Wie folgt:

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

3 Die Hauptmethoden in ResourceBundle

werden über die Methode ResourceBundle.getBundle()static abgerufen Eigenschaften. Die Eigenschaftendatei muss nicht das Suffix .properties haben. ResourceBundle-Objekte können auch von InputStream abgerufen werden.

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

Das bei der Verwendung aufgetretene Problem kann der Pfad der Konfigurationsdatei sein. Wenn sich die Konfigurationsdatei nicht unter dem Paket befindet, in dem sich die aktuelle Klasse befindet, müssen Sie die Paketnamenqualifikation verwenden Die Attributdatei befindet sich im src-Stammverzeichnis. Verwenden Sie dann demo.properties oder demo direkt.

4 Beispiele für den Betrieb von Eigenschaften

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;
   }
}

[Verwandte Empfehlungen]

1. Besondere Empfehlung: Version „php Programmer Toolbox“ V0.1 herunterladen 2.

Java Free Video Tutorial

3

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Java-Codes zum Bedienen von Eigenschaften. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn