2009-09-04 46 views
20

Tôi là một newbie khi nói đến tài sản, và tôi đọc rằng XML là cách ưa thích để lưu trữ chúng. Tuy nhiên, tôi nhận thấy rằng việc viết tệp .properties thông thường theo kiểuThuộc tính Java: tệp .properties vs xml?

foo=bar 
fu=baz 

cũng hoạt động. Điều này có nghĩa là ít đánh máy hơn (và có thể dễ đọc hơn và hiệu quả hơn). Vì vậy, những lợi ích của việc sử dụng một tập tin XML là gì?

Trả lời

19

Trong XML, bạn có thể lưu trữ phức tạp hơn (ví dụ: thứ bậc) dữ liệu hơn trong tệp thuộc tính. Vì vậy, nó phụ thuộc vào usecase của bạn. Nếu bạn chỉ muốn lưu trữ một số lượng nhỏ các thuộc tính trực tiếp thì một tệp thuộc tính sẽ dễ xử lý hơn (mặc dù lớp thuộc tính Java cũng có thể đọc các thuộc tính dựa trên XML). Tuy nhiên, bạn nên chuyển sang giao diện khác (ví dụ: bằng cách sử dụng Apache Commons Configuration) nếu bạn cần.

+0

FYI: Lớp java.util.Properties hỗ trợ 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

Chỉnh sửa: các url ở trên bị xáo trộn paren đóng sẽ là một phần của các liên kết. – Asaph

+1

hãy kiểm tra/thêm câu trả lời của Mike Sickler trước khi đi đến kết luận. Bạn chắc chắn không muốn bỏ lỡ quan điểm của mình. – Gerrard

7

Nếu bạn có rất nhiều dữ liệu lặp lại, nó có thể được đơn giản để xử lý

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

hơn là để xử lý

 
connection1=this 
connection2=that 
connection3=the other 

đặc biệt là nếu bạn đang mong đợi để có để lưu trữ rất nhiều dữ liệu hoặc phải được lưu trữ trong một hệ thống phân cấp nhất định

Nếu bạn chỉ lưu trữ một vài giá trị vô hướng, tôi sẽ Các thuộc tính đơn giản tiếp cận mọi lúc

+0

Vâng, tôi đã định sử dụng nó cho các giá trị khác nhau. Không có dữ liệu nào được chia sẻ với các tệp khác. –

1

XML rất tiện lợi cho cấu trúc dữ liệu phức tạp và hoặc các mối quan hệ. Nó có một công việc tốt cho việc có một "ngôn ngữ chung" giữa các hệ thống.

Tuy nhiên, xml có tính phí. Nó nặng để tiêu thụ. Bạn phải tải trình phân tích cú pháp, đảm bảo tệp ở định dạng chính xác, tìm thông tin, v.v ...

Trong khi tệp thuộc tính có trọng lượng khá nhẹ và dễ đọc. Làm việc cho các cặp khóa/giá trị đơn giản.

1

Tùy thuộc vào dữ liệu bạn đang mã hóa. Với XML, bạn có thể định nghĩa một biểu diễn phức tạp hơn về dữ liệu cấu hình trong ứng dụng của bạn. Lấy một cái gì đó giống như khung struts làm ví dụ. Trong khung công tác, bạn có một số lớp Hành động có thể chứa 1 ... n số nhánh phía trước. Với tệp cấu hình XML, bạn có thể xác định nó như sau:

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

Loại liên kết này khó thực hiện bằng cách sử dụng biểu diễn cặp khóa-giá trị của tệp thuộc tính. Nhiều khả năng, bạn sẽ cần phải đưa ra một nhân vật phân định và sau đó bao gồm tất cả các hành động chuyển tiếp trên một thuộc tính riêng biệt được tách biệt bởi ký tự phân cách này. Đó là một chút công việc cho một giải pháp hackish. Tuy nhiên, như bạn đã chỉ ra, cú pháp XML có thể trở thành gánh nặng nếu bạn chỉ muốn nêu một cái gì đó rất đơn giản, như thiết lập tính năng blah thành true.

13

Lợi ích lớn nhất khi sử dụng tệp XML là XML khai báo mã hóa của nó, trong khi .properties thì không.

Nếu bạn đang dịch các tệp thuộc tính này sang N ngôn ngữ, có thể các tệp này có thể trở lại trong N mã hóa khác nhau.Và nếu bạn không cẩn thận, bạn hoặc người khác có thể không thể đảo ngược tham nhũng các mã hóa ký tự.

+2

Điều đó đơn giản là sai. Các tệp thuộc tính Java được định nghĩa là có mã hóa ISO8859_1, mọi mã hóa khác đều chống lại đặc tả. Xem http://java.sun.com/javase/6/docs/api/java/util/Properties.html để biết thêm thông tin. – Mnementh

+0

Dude- nó không 'khai báo' mã hóa của nó trong tệp. –

+6

Bạn đang bỏ lỡ quan điểm của tôi. Một trình soạn thảo văn bản hoặc công cụ khác sẽ tuân theo mã hóa khai báo của tệp XML, nhưng vì tệp thuộc tính không có khai báo như vậy, nên người dùng quyết định mã hóa nào để lưu mã đó. Đó là công thức gây rắc rối nếu bạn đang dịch . –

4

Nếu bạn có cả hai dữ liệu phân cấp & không gian tên trùng lặp, sau đó sử dụng XML.

1) Để bắt chước chỉ là một cấu trúc phân cấp trong một thuộc tính tập tin, bạn chỉ cần sử dụng ký hiệu dấu chấm:

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

Vì vậy, phức tạp (thứ bậc) biểu diễn dữ liệu là * không phải là một lý do để sử dụng xml. Đối với dữ liệu lặp đi lặp lại, chúng ta có thể sử dụng thư viện của bên thứ 3 như ini4j để cố định một cách rõ ràng trong java một số nhận dạng trên một định lượng ẩn trong chính tập tin thuộc tính.

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

được phiên dịch sang (ở chế độ nền)

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

Tuy nhiên, numerating thuộc tính cùng tên vẫn không duy trì các mối quan hệ cha-con cụ thể. I E. làm thế nào để chúng ta đại diện cho dù Batgirl là với The Joker hay Batman?

Vì vậy, xml là bắt buộc khi cần cả hai tính năng. Bây giờ chúng tôi có thể quyết định xem mục nhập xml đầu tiên có phải là thứ chúng tôi muốn hoặc thứ 2 không.

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

--or--

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

chi tiết hơn nữa trong .... http://ilupper.blogspot.com/2010/05/xml-vs-properties.html

+1

Tôi không hiểu ngay cả những điểm cơ bản nhất ở đây ... – KjetilNordin

+1

Hi Kjetil, điểm ở đây là những gì một mục thuộc tính có thể đại diện và những gì một mục nhập xml có thể đại diện. Về cơ bản, vì mục nhập thuộc tính thiếu một ngữ nghĩa gần, cấu trúc của nó ít "3D" hơn khi hầu hết các đồng nghiệp của tôi đặt nó. Vì vậy, nếu một trong những cố gắng để thi đua một cấu trúc hierachical với các thuộc tính trên xml, họ sẽ yêu cầu một bit điều khiển. Nếu không, sự mơ hồ nảy sinh. – ilupper

0

Các nhược điểm của XML:

  1. Thật khó có thể đọc - thẻ làm cho nó trông bận rộn hơn thực tế là
  2. Hệ thống phân cấp và thẻ làm cho khó chỉnh sửa và dễ bị lỗi của con người
  3. Không thể "nối thêm" vào tệp thuộc tính XML để giới thiệu thuộc tính mới hoặc cung cấp giá trị ghi đè cho thuộc tính hiện tại để một chiến thắng. Khả năng chắp thêm thuộc tính có thể rất mạnh - chúng tôi có thể triển khai logic quản lý thuộc tính xung quanh để các thuộc tính nhất định "nóng" và chúng tôi không cần phải khởi động lại cá thể khi những thay đổi này

Thuộc tính Java tập tin giải quyết các vấn đề trên. Các quy ước đặt tên nhất quán và ký hiệu dấu chấm có thể giúp giải quyết vấn đề phân cấp.

Các vấn đề liên quan