Java 분석 INI 파일
5333 단어 Java
한 절 을 확장 하거나 절 이름 뒤에 콜론 (:) 과 계승 되 는 설정 데이터 의 절 이름 을 가 져 와 다른 절 에서 계승 할 수 있 습 니 다.
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
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.