Java 분석 INI 파일

5333 단어 Java
섹 션 이 있 는 INI 파일 을 분석 할 수 있 습 니 다. 섹 션 이 없 으 면 section 기본 값 은 default 입 니 다.
한 절 을 확장 하거나 절 이름 뒤에 콜론 (:) 과 계승 되 는 설정 데이터 의 절 이름 을 가 져 와 다른 절 에서 계승 할 수 있 습 니 다.
package com.ini;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Properties;

public class ParseIni {

	protected HashMap sections = new HashMap();
	private transient String defaultName = "default";
	private transient String sectionName;
	private transient Properties property;
	private Properties parentObj;

	/**
	 *     
	 * 
	 * @param filename
	 *                
	 * @throws IOException
	 */
	public ParseIni(String filename) throws IOException {
		BufferedReader reader = new BufferedReader(new FileReader(filename));
		read(reader);
		reader.close();
	}

	/**
	 *     
	 * 
	 * @param reader
	 * @throws IOException
	 */
	protected void read(BufferedReader reader) throws IOException {
		String line;
		sectionName = this.defaultName;
		property = new Properties();
		sections.put(sectionName, property);

		while ((line = reader.readLine()) != null) {
			parseLine(line);
		}
	}

	/**
	 *       
	 * 
	 * @param line
	 */
	protected void parseLine(String line) {
		line = line.trim();
		if (line.indexOf('#') == 0 || line.indexOf(';') == 0) {
			return;
		}

		if (line.matches("\\[.*\\]")) {
			sectionName = line.replaceFirst("\\[(.*)\\]", "$1").trim();
			property = new Properties();
			if (sectionName.matches(".*:.*")) {
				int pos = sectionName.indexOf(':');
				String child = sectionName.substring(0, pos);
				String parent = sectionName.substring(pos + 1);

				parentObj = this.getSection(parent);
				if (parentObj != null) {
					property = (Properties) parentObj.clone();
					sections.put(child, property);
				}
			} else {
				sections.put(sectionName, property);
			}
		} else if (line.matches(".*=.*")) {
			int i = line.indexOf('=');
			String name = line.substring(0, i).trim();
			String value = line.substring(i + 1).trim();

			if (value.indexOf('"') == 0 || value.indexOf('\'') == 0) {
				//        "   '
				value = value.substring(1, value.length());
				//      "   '
				int len = value.length();
				if (value.indexOf('"') == len - 1 || value.indexOf('\'') == len - 1) {
					value = value.substring(0, len - 1);
				}
			}

			property.setProperty(name, value);
		}
	}

	/**
	 *       key    
	 * 
	 * @param section
	 * @param key
	 * @return String
	 */
	public String get(String section, String key) {
		if (section.equals(null) || section == "")
			section = this.defaultName;

		Properties property = (Properties) sections.get(section);
		if (property == null) {
			return null;
		}

		String value = property.getProperty(key);
		if (value == null)
			return null;

		return value;
	}

	/**
	 *       key
	 * 
	 * @param section
	 * @return Properties
	 */
	public Properties getSection(String section) {
		if (section.equals(null) || section == "")
			section = this.defaultName;

		Properties property = (Properties) sections.get(section);
		if (property == null) {
			sections.put(section, property);
		}

		return property;
	}

	/**
	 *         
	 * 
	 * @param section
	 * @param property
	 */
	public void set(String section, String key, String value) {
		if (property == null)
			property = new Properties();

		if (section.equals(null) || section == "")
			section = this.defaultName;

		if (key.equals(null) || key == "") {
			System.out.println("key is null");
			return;
		}

		sections.put(section, property);
		property.setProperty(key, value);
	}

	/**
	 *     
	 * 
	 * @param section
	 */
	public void setSection(String section) {
		sections.put(section, property);
	}
}


파일: app. ini
[app]
#    
env = prod

;     
app_dir = "/data/app"
;       
config = "/etc/app/config"

#    
database = "app"
#       
user = "root"
#      
password = "123456"

# sever1  app  
[server1:app]
database = "server1"
user = "server1"
password = "s1passwd"

# sever1  app  
[server2:app]
database = "server1"
user = "server1"
password = "s1passwd"
;    
env = dev

호출 코드:
String fileName = "app.ini";
ParseIni config = new ParseIni(fileName);
String app = config.get("app", "env");
System.out.println("app.env = " + app);
		
String s1 = config.get("server1", "env");
System.out.println("server1.env = " + s1);
		
String s2 = config.get("server2", "database");
System.out.println("server2.database = " + s2);
		
config.setSection("server3");
Properties node1 = config.getSection("server3");
		
node1.setProperty("env", "local");
System.out.println("server3.env = " + config.get("server3", "env"));

출력 내용:
app.env = prod
server1.env = local
server2.database = server1
server3.env = local

감사합니다. 
http://blog.csdn.net/yuyue618/article/details/4139086

좋은 웹페이지 즐겨찾기