Maison  >  Article  >  Java  >  Explication détaillée du code Java pour les propriétés d'exploitation

Explication détaillée du code Java pour les propriétés d'exploitation

Y2J
Y2Joriginal
2017-05-16 09:52:571200parcourir

Cet article présente principalement l'explication détaillée du fichier de configuration des propriétés du fonctionnement Java, et présente en détail les propriétés et les principales méthodes. Ceux qui sont intéressés peuvent en savoir plus

1 Introduction : <.>

La classe java.util.Properties fournie par JDK hérite de la classe Hashtable et implémente l'interface Map. Elle utilise une paire clé-valeur pour enregistrer l'ensemble de propriétés, où la clé et la valeur sont toutes deux des types de chaîne.

La classe java.util.Properties fournit les méthodes getProperty() et setProperty() pour faire fonctionner les fichiers de propriétés, tout en utilisant la méthode load() et la méthode store() pour charger et enregistrer le fichier de configuration des propriétés.

La classe java.util.ResourceBundle fournit également des méthodes pour lire le fichier de configuration des propriétés. ResourceBundle est une

classe abstraite.

2. Méthodes principales dans Propriétés

1) load(InputStream inStream) : Cette méthode peut charger les propriétés du fichier correspondant au fichier de propriétés .properties dans le flux. . Liste des propriétés de la classe

objet. Load a deux méthodes surcharges  : load(InputStream inStream), load(Reader reader), qui peuvent charger les fichiers d'attributs de différentes manières.

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来获取
La méthode de lecture est la suivante :

Properties pro = new Properties();                   //实例化一个Properties对象
InputStream inStream = new FileInputStream("demo.properties");     //获取属性文件的文件输入流
pro.load(nStream);
inStream.close();
2) store (OutputStream out, String comments) : Cette méthode écrit la liste des propriétés de l'objet de classe Properties dans le fichier . fichier de configuration des propriétés. Comme suit :

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

3 Les principales méthodes de ResourceBundle

sont obtenues via la méthode ResourceBundle.getBundle()

static. Properties Le fichier de propriétés n'a pas besoin d'avoir le suffixe .properties. Les objets ResourceBundle peuvent également être obtenus à partir d'InputStream.

ResourceBundle resource = ResourceBundle.getBundle("com/xiang/demo");//emo为属性文件名,放在包com.xiang下,如果是放在src下,直接用test即可 
ResourceBundle resource1 = new PropertyResourceBundle(inStream);  
String value = resource.getString("name");
Le problème rencontré lors de l'utilisation peut être le chemin du fichier de configuration. Lorsque le fichier de configuration n'est pas sous le package où se trouve la classe actuelle, vous devez utiliser la qualification du nom du package ; Le fichier de propriétés se trouve dans le répertoire racine src, utilisez ensuite demo.properties ou demo directement.

4 Exemples d'opérations de propriétés

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;
   }
}
[Recommandations associées]

1

Recommandation spéciale : Téléchargement de la version V0.1 de "php Programmer Toolbox"

2

Tutoriel vidéo gratuit Java

3

Manuel du didacticiel JAVA.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn