>  기사  >  Java  >  속성 조작을 위한 자바 코드에 대한 자세한 설명

속성 조작을 위한 자바 코드에 대한 자세한 설명

Y2J
Y2J원래의
2017-05-16 09:52:571281검색

이 글은 주로 Java 연산 Properties 구성 파일에 대한 자세한 설명을 소개하며, 관심 있는 분들은 자세히 알아보실 수 있습니다.

1 소개:

JDK에서 제공하는 java.util.Properties 클래스는 Hashtable 클래스를 상속하고 Map 인터페이스를 구현합니다. 키와 값은 모두 문자열 유형인 속성 집합을 저장하기 위해 키-값 쌍을 사용합니다.

java.util.Properties 클래스는 속성 파일을 조작하기 위한 getProperty() 및 setProperty() 메소드를 제공하고, 속성 구성 파일을 로드하고 저장하기 위해 load() 메소드 및 store() 메소드를 사용합니다.

java.util.ResourceBundle 클래스는 속성 구성 파일을 읽는 방법도 제공합니다. ResourceBundle은 추상 클래스입니다.

2. Properties의 주요 메소드

1) load(InputStream inStream): 이 메소드는 .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()static 메소드를 통해 획득됩니다. 속성 속성 파일에는 .properties 접미사를 추가할 필요가 없습니다. ResourceBundle 객체는 InputStream에서도 얻을 수 있습니다.

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

사용 중 발생하는 문제는 구성 파일의 경로일 수 있습니다. 구성 파일이 현재 클래스가 있는 패키지에 없는 경우 속성 파일인 경우 패키지 이름 한정자를 사용해야 합니다. src 루트 디렉토리 아래에 직접적으로 데모.properties 또는 데모를 사용하십시오.

4가지 속성 작업 예시

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 Programmer Toolbox" V0.1 버전 다운로드

2. Java 무료 동영상 튜토리얼

3. >

위 내용은 속성 조작을 위한 자바 코드에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.