2013-06-17 47 views
20

Tôi có một tệp thuộc tính, có tên là prop.properties. Trong mã chính của tôi, tôi có cả hai System.getProperty()properties.getProperty().Sự khác nhau giữa System.getProperty và properties.getProperty trong Java

Câu hỏi của tôi là: cả hai đều nhận được tài sản từ prop.properties hoặc họ sẽ nhận được tài sản từ những nơi khác nhau, properties.getProperty() nhận tài sản từ prop.propertiesSystem.getProperty() nhận tài sản từ địa điểm khác.

+1

Phụ thuộc vào nơi 'thuộc tính' đến từ đâu. Nếu 'Properties properties = System.getProperties();', thì có, chúng sẽ giống nhau. Nếu 'Properties propertes = new Properties();', thì không, chúng sẽ không. – CodeBlind

+0

Cảm ơn bạn Ben, bây giờ tôi hiểu –

Trả lời

30

System.getProperty() lấy thuộc tính như được xác định bởi JVM (hoặc chính JVM hoặc bất kỳ tùy chọn -D nào bạn có thể đã qua tại dòng lệnh). Danh sách các thuộc tính được xác định có thể được tìm thấy here (nhờ @NikitaBeloglazov).

properties.getProperty() là kết quả của người nào đó đã khởi tạo đối tượng thuộc loại Properties. Chúng không giống nhau, mặc dù you can get what System has as a Properties instance.

Một Properties đối tượng là rất thường là kết quả của việc tải một tập tin bất động sản Java (xem here cho cách này được thực hiện)

+0

Bạn có thể thêm liên kết đến hướng dẫn java về các thuộc tính hệ thống không? http://docs.oracle.com/javase/tutorial/essential/environment/sysprop.html –

+0

@NikitaBeloglazov cảm ơn! Đã thêm – fge

+0

Cảm ơn bạn, đây là giải thích rất tốt! –

8

System.getProperty(propName) là một phím tắt cho System.getProperties().getProperty(propName).

Tuy nhiên java.util.Properties chỉ là một phân lớp của java.utils.Hashtable, do đó, thể hiện của nó có thể được tạo ở mọi nơi trong mã và được điền với bất kỳ dữ liệu nào. Rõ ràng đang

Properties props = System.getProperties(); 
props.getProperty("os.name"); 

cũng giống như

System.getProperty("os.name"); 

Tuy nhiên

Properties props = new Properties(); 
props.load(new FileInputStream("myprops.properties")) 
props.getProperty("os.name"); 

là không giống nhau.

+0

Cảm ơn sự giúp đỡ của bạn. Bây giờ tôi có thể tìm ra. –

2

Lớp System đề cập đến JVM bạn đang chạy (sẽ nhận thông tin từ hệ điều hành của bạn). Khi bạn sử dụng getProperty trên System bạn sẽ nhận được các thuộc tính thực tế.

Lớp Property về cơ bản là bảng băm được tôn vinh. Bạn hoàn toàn có thể tự xác định nó, vì vậy khi bạn thực hiện getProperty() bạn sẽ nhận được kết quả mà bạn đã thiết lập. Tính hữu dụng của lớp Property là nó có một trình phân tích cú pháp XML được tích hợp sẵn để bạn có thể đọc trong các thuộc tính từ một tệp.

+0

Cảm ơn câu trả lời của bạn, nó rất hữu ích –

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