을 당신은 log4j
의 형태로 완벽한 예를 여기 here에서 속성 샘플입니다.
log4j.appender.R = org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.File = logs/bensApps.log
log4j.appender.R.Append = true
log4j.appender.R.DatePattern = '.'yyy-MM-dd
log4j.appender.R.layout = org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern = %d{yyyy-MM-dd HH:mm:ss} %c{1} [%p] %m%n
당신 같은 사람 키의 계층 구조가있는 경우 :
Map<String,Object> root = new HashMap<>();
root.put("level1", "foobar");
root.put("level2", Collections.singletonMap("p", "foobar");
을 그것은 당신까지로 번역하는 것입니다
level1=foobar
level2.p=foobar
그리고 파일을 읽을 때, 분할 서브맵에 .
:
Map<String, Object> root = new HashMap<>();
Properties propz = new Properties();
// load from your file
for (Map.Entry<String,Object> entry : propz.entrySet()) {
String[] path = entry.getKey().split('\\.');
Map<String,Object> parent = root;
int n = path.length - 1;
for (int i = 0; i < n; ++i) {
String p = path[i];
Object child = parent.get(p);
if (null == child) {
Map<String,Object> _p = new HashMap<>();
parent.put(p, _p);
parent = _p;
} else if (child instanceof Map) {
parent = (Map<String,Objext>) child;
} else {
// it is up to you to do something when the path extends beyond a "final" key
}
}
parent.put(path[n], entry.getValue());
}
그러나 이것은 "바퀴의 재발견"패턴이며, 다른 해결책은 스스로 해결하는 것보다 더 나은 해결책을 제시합니다. 이 발생하지 않습니다
p1=foobar
p1.p2=foobar
기계 생성 된 속성의 경우, 예외는 아마도 가장 좋은 대답입니다 :이 예는 또한 당신에게 문제의 종류를 보여줍니다. 그러나 인간이 조작 한 속성의 경우에는 이것이 의미가있을 수 있습니다.
Java 7은 JAXB와 함께 제공되기 때문에 추가 라이브러리 없이도 전체 XML로 수행 할 수 있습니다. 그리고 일종의 계층 구조를 사용합니다.
JSON을 살펴보십시오. 예를 들어, [GSON] (https://code.google.com/p/google-gson/)은 JSON에 대한 간편한 직렬화를 지원합니다. –
JSON에 익숙하지만 .properties 파일과 결합 할 수 있습니까? 나는 그 예를 찾을 수 없었다. – KjetilNordin
속성 파일을 사용하더라도 파일을 수동으로 편집하면 비 직렬화가 중단되지 않습니까? – manouti