이 글은 주로 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 버전 다운로드
위 내용은 속성 조작을 위한 자바 코드에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!