2009-09-04 4 views
20

저는 속성에 관해서는 초보자입니다. XML을 저장하는 것이 바람직한 방법이라고 읽었습니다. 그러나, 스타일의 정규 .properties 파일을 쓰는 것이 나타났습니다.자바 속성 : .properties 파일 대 xml?

foo=bar 
fu=baz 

도 작동합니다. 이것은 타이핑이 훨씬 적다는 것을 의미한다. (읽기 쉽고 효율적이다.) 그렇다면 XML 파일을 사용하면 어떤 이점이 있습니까? 당신이 반복되는 많은 양의 데이터가있는 경우

답변

19

XML에서 더 복잡한 (예. 계층 적) 데이터를 가져올 수 있습니다. 그래서 그것은 당신의 유스 케이스에 달려 있습니다. 적은 수의 직접 속성 만 저장하려는 경우 속성 파일을 처리하기가 더 쉽습니다 (Java 속성 클래스는 XML 기반 속성도 읽을 수 있음).

어쨌든 구성 인터페이스를 가능한 한 일반적으로 유지하는 것이 좋습니다. 필요한 경우 다른 표현으로 전환하는 데 문제가 없습니다 (예 : Apache Commons Configuration 사용).

+0

참고 : java.util.Properties 클래스는 XML을 지원하지 않습니다. http://java.sun.com/javase/6/docs/api/java/util/Properties.html#loadFromXML(java.io.InputStream) http://java.sun.com/javase/6/docs/api/java/util/Properties.html#storeToXML(java.io.OutputStream,%20java.lang.String) – Asaph

+0

편집 : 위의 URL이 엉망입니다. 닫는 괄호는 링크의 일부 여야합니다. – Asaph

+1

결론에 도달하기 전에 Mike Sickler의 대답을 확인/추가하십시오. 당신은 분명히 그의 요점을 놓치고 싶지 않습니다. – Gerrard

7

, 당신이 많이 저장해야하는 기대, 특히

 
connection1=this 
connection2=that 
connection3=the other 

를 처리하는 것보다

 
<connections> 
    <connection>this</connection> 
    <connection>that</connection> 
    <connection>the other</connection> 
</connections> 

를 처리하는 것이 더 간단 할 수있다의 데이터 또는 명확한 계층 구조에 저장해야 함

스칼라 값을 저장하는 경우 단순한 속성이 매번 접근합니다.

+0

네, 다른 값으로 사용할 계획이었습니다. 데이터 중 어느 것도 다른 파일과 공유되지 않습니다. –

1

XML은 복잡한 데이터 구조 및 관계에 편리합니다. 그것은 시스템들 사이에 "공통 언어"를 갖는 것에 대한 훌륭한 일을합니다.

그러나 xml은 비용이 부과됩니다. 그것은 무겁다. 파서를로드하고 파일이 올바른 형식인지 확인하고 정보를 찾는 등의 작업을 수행해야합니다.

반면 속성 파일은 매우 가볍고 읽기 쉽습니다. 간단한 키/값 쌍으로 작동합니다.

1

인코딩하는 데이터에 따라 다릅니다. XML을 사용하면 애플리케이션에서보다 복잡한 구성 데이터 표현을 정의 할 수 있습니다. 예를 들어 struts 프레임 워크와 같은 것을 가져옵니다. 프레임 워크에는 1 ... n 개의 순방향 분기를 포함 할 수있는 여러 Action 클래스가 있습니다. XML 구성 파일, 당신은 그것을 좋아 정의 할 수 있습니다 :

<action class="MyActionClass"> 
    <forward name="prev" targetAction="..."/> 
    <forward name="next" targetAction="..."/> 
    <forward name="help" targetAction="..."/> 
</action> 

협회의이 종류는 특성 파일의 바로 키 - 값 쌍의 표현을 사용하여 달성하기 어렵다. 대부분의 경우, 구분 문자를 찾아 내고이 모든 구분 문자로 구분 된 단일 속성에 모든 전달 작업을 포함해야합니다. 해킹 된 솔루션을 위해서는 꽤 많은 작업이 필요합니다.

그러나 지적한대로 XML 구문은 매우 간단합니다. 예를 들어 기능 설정을 true로 설정하면 매우 간단합니다.

13

XML 파일을 사용할 때 가장 큰 이점은 XML이 인코딩을 선언하고 .properties는 그렇지 않다는 것입니다.

이러한 속성 파일을 N 개 언어로 번역하는 경우 이러한 파일이 N 개의 다른 인코딩으로 다시 나타날 수 있습니다.조심하지 않으면 자신이나 다른 사람이 문자 인코딩을 돌이킬 수 없게 손상시킬 수 있습니다.

+2

그건 그냥 잘못입니다. Java 속성 파일은 ISO8859_1을 인코딩으로 정의하고, 다른 모든 인코딩은 사양을 기준으로합니다. 자세한 내용은 http://java.sun.com/javase/6/docs/api/java/util/Properties.html을 참조하십시오. – Mnementh

+0

Dude- 파일의 인코딩을 '선언'하지 않습니다. –

+6

당신은 나의 요점을 놓치고 있습니다. 텍스트 편집기 또는 다른 도구는 XML 파일의 선언 된 인코딩을 따르지 만 등록 정보 파일에는 이러한 선언이 없으므로 사용자가 저장해야 할 인코딩을 결정해야합니다. 번역을 수행하는 경우 문제가 발생합니다 . –

4

계층 적 데이터 & 두 개의 중복 네임 스페이스가있는 경우 XML을 사용하십시오.

a.b=The Joker 
a.b.c=Batgirl 
a.b=Batman 
a.b=Superman 
a.b.c=Supergirl 

그래서 복잡한 (계층) 데이터 표현입니다 *하지 XML을 사용하는 이유 :

1) 단순히 점 표기법을 사용하여 등록 정보 파일에 단지 계층 구조를 모방합니다.

2) 반복되는 데이터의 경우, ini4j와 같은 제 3 자 라이브러리를 사용하여 속성 파일 자체의 암시 적 한정사에 대한 개수 식별자를 Java에서 명시 적으로 지정할 수 있습니다.

a.b=The Joker 
a.b=Batgirl 
a.b=Batman 

가 변환됩니다 (백그라운드에서)

a.b1=The Joker 
a.b2=Batgirl 
a.b3=Batman 

그러나, 특정 부모 - 자식 관계를 유지하지 않습니다 여전히 같은 이름의 속성을 numerating. 즉. Batgirl이 조커 (Joker) 또는 배트맨 (Batman)과 함께 할 수있는 방법은 무엇입니까?

두 기능이 모두 필요하면 xml이 필요합니다. 이제 첫 번째 XML 항목이 우리가 원하는 항목인지 아니면 두 번째 항목인지 결정할 수 있습니다.

[a] 
    [b]Joker[/b] 
    [b] 
     [c]Batgirl[/c] 
    [/b] 
[a] 

또는 -

[a] 
    [b]Batman[/b] 
    [b] 
     [c]Batgirl[/c] 
    [/b] 
[/a] 

더 자세히 .... http://ilupper.blogspot.com/2010/05/xml-vs-properties.html

+1

여기서 가장 기본적인 점도 이해하지 못합니다. – KjetilNordin

+1

안녕하세요 Kjetil, 여기는 속성 항목이 표현할 수있는 것과 XML 항목이 표현할 수있는 것입니다. 근본적으로, 속성 입력은 가까운 의미가 없기 때문에, 대부분의 동료가 생각한 것처럼 구조가 "3D"적습니다. 따라서 xml 이상의 속성을 가진 계층 구조를 에뮬레이션하려는 경우 제어 비트가 필요합니다. 그렇지 않으면 모호성이 발생합니다. – ilupper

0

XML의 단점 :

  1. 그것은 읽기 어려운합니다 - 태그가 실제보다 더 바쁘게 보이게합니다.
  2. 계층 구조와 태그를 사용하면 편집하기가 어렵고 사람의 오류가 더 많이 발생합니다.
  3. XML 속성 파일에 "추가"하여 새 속성을 도입하거나 기존 속성의 재정의 값을 제공하여 마지막 하나는 이긴다. 속성을 추가하는 기능은 매우 강력 할 수 있습니다. 따라서 특정 속성이 "뜨거워"이러한 속성을 변경하기 위해 인스턴스를 다시 시작할 필요가 없도록 속성 관리 논리를 구현할 수 있습니다.

Java 속성 파일은 위의 문제를 해결합니다. 일관된 이름 지정 규칙과 점 표기법은 계층 구조 문제를 해결하는 데 도움이 될 수 있습니다.