Nội dung
Giới thiệu
Lớp Properties trong java được sử dụng để tạo ra đối tượng chứa cặp khóa (key) và giá trị (value) như một chuỗi. Lớp java.util.Properties là một lớp con của Hashtable.
Lớp Properties có thể được sử dụng để lấy giá trị (key) dựa trên khóa (key) của thuộc tính. Lớp Properties cung cấp các phương thức lấy dữ liệu từ các file .properties và lưu trữ dữ liệu vào file .properties. Hơn nữa, nó có thể được sử dụng để có được properties của hệ thống.
File Properties không cần biên dịch lại, nếu thông tin được thay đổi từ file .properties: Nếu có bất kỳ thông tin nào được thay đổi từ file .properties, bạn không cần phải biên dịch lại lớp java. Nó được sử dụng để lưu trữ thông tin mà sẽ được thay đổi thường xuyên.
Lớp java.util.Properties được định nghĩa như sau:
public class Properties extends Hashtable<Object,Object> { }
Nội dung của file .properties
Một số quy định nội dung của file .properties:
- Mỗi cặp khóa – giá trị (key-value) được viết trên một dòng, phân cách bằng dấu =.
- Sử dụng dấu # để thêm ghi chú cho các cặp khóa – giá trị (key-value).
- Có thể thêm trùng khóa, tuy nhiên lớp Properties chỉ lấy giá trị của khóa cuối cùng, do lớp Properties sử dụng map để lưu dữ liệu nên cặp khóa cuối cùng được giữ lại.
- Các dòng bắt đầu bằng các ký tự ! hoặc # bị bỏ qua. Dòng trắng cũng bị bỏ qua.
- Tên key không được chứa khoảng trắng ở giữa. Ví dụ: key 1 là không đúng, phải đặt là key1.
- Có thể có thêm khoảng trắng ở 2 đầu của khóa và giá trị: tuy nhiên lớp Properties sẽ tự động cắt khoảng trắng ở 2 đầu của khóa, cắt khoảng trắng đầu của giá trị, khoảng trắng ở cuối giá trị vẫn giữ nguyên. Ví dụ: name=gpcoder và name = gpcoder là giống nhau.
- Giá trị có thể kéo dài một vài dòng nếu mỗi dòng được kết thúc bởi dấu gạch chéo ngược (‘\‘). Ví dụ:
targetCities=\ Detroit,\ Chicago,\ Los Angeles
Điều này tương đương với targetCities = Detroit, Chicago, Los Angeles (khoảng trắng ở đầu dòng được bỏ qua).
- Ký tự \n, \r, và \t có thể được sử dụng.
- Ký tự dấu gạch chéo \ ngược của anh ta phải được thay thế bằng dấu gạch chéo kếp (\\). Ví dụ: path=c:\\docs\\doc1
- Ký tự UNICODE có thể được nhập như trong một chương trình Java, sử dụng tiền tố \u. Ví dụ: \u002c.
Ví dụ nội dung của một file .properties như sau:
# Your comment key1=Value1 key2=Value2 keyn=Valuen
Các phương thức của lớp Properties trong java
Lớp Properties kế thừa từ lớp Hashtable. Lớp Hashtable cài đặt Map Interface nên bạn có thể sử dụng các phương thức đã được định nghĩa của lớp HashTable và Map Interface.
Ngoài ra, lớp Properties còn cung cấp các phương thức riêng của nó như dưới đây:
Phương thức | Mô tả |
public void load(Reader r) | Tải dữ liệu từ đối tượng Reader. |
public void load(InputStream is) | Tải dữ liệu từ đối tượng InputStream. |
public String getProperty(String key) | Trả về giá trị dựa trên key. |
public void setProperty(String key,String value) | Gán giá trị (value) dựa vào khóa (key). |
public void store(Writer w, String comment) | Lưu các thuộc tính trong đối tượng Writer. |
public void store(OutputStream os, String comment) | Lưu các thuộc tính trong đối tượng OutputStream. |
storeToXML(OutputStream os, String comment) | Lưu các thuộc tính trong đối tượng Writer để tạo tài liệu xml. |
public void storeToXML(Writer w, String comment, String encoding) | Lưu các thuộc tính trong đối tượng Writer để tạo ra tài liệu xml với mã hoá được chỉ định. |
Ví dụ minh họa
Ví dụ đọc thông tin của file config.properties bất kỳ
Tạo một file vào thư mục gốc của project như sau:
config.properties
siteName=GP Coder siteUrl=gpcoder.com
Viết chương trình đọc file properties trên:
PropertiesExample1.java
package com.gpcoder.collection.properties; import java.io.FileReader; import java.util.Properties; public class PropertiesExample1 { public static void main(String[] args) throws Exception { // create reader object FileReader reader = new FileReader("config.properties"); // crate properties object Properties properties = new Properties(); properties.load(reader); // show file info System.out.println(properties.getProperty("siteName")); System.out.println(properties.getProperty("siteUrl")); } }
Kết quả thực thi chương trình trên:
GP Coder gpcoder.com
Ví dụ về lớp Properties lấy các thuộc tính của hệ thống
package com.gpcoder.collection.properties; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import java.util.Properties; import java.util.Set; public class PropertiesExample2 { public static void main(String[] args) throws Exception { // get system properties Properties p = System.getProperties(); Set<Entry<Object, Object>> set = p.entrySet(); // show system properties Iterator<Entry<Object, Object>> itr = set.iterator(); while (itr.hasNext()) { Map.Entry<Object, Object> entry = itr.next(); Object key = entry.getKey(); Object value = entry.getValue(); System.out.println(key + " = " + value); } } }
Kết quả thực thi chương trình trên:
java.runtime.name = Java(TM) SE Runtime Environment sun.boot.library.path = C:\Program Files\Java\jdk1.8.0_131\jre\bin java.vm.version = 25.131-b11 java.vm.vendor = Oracle Corporation java.vendor.url = http://java.oracle.com/ path.separator = ; java.vm.name = Java HotSpot(TM) 64-Bit Server VM .....
Ví dụ sử dụng lớp Properties để tạo file .properties
package com.gpcoder.collection.properties; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.Properties; public class PropertiesExample3 { public static void main(String[] args) throws Exception { OutputStream output = null; try { // Properties File output at project root folder output = new FileOutputStream("database.config.properties"); // create properties object Properties prop = new Properties(); // set the properties value prop.setProperty("database", "localhost"); prop.setProperty("dbuser", "gpcoder"); prop.setProperty("dbpassword", "password"); // save properties to a file prop.store(output, "Config Database connection"); } catch (IOException io) { io.printStackTrace(); } finally { if (output != null) { try { output.close(); } catch (IOException e) { e.printStackTrace(); } } } } }
Thực thi chương trình trên, một file database.config.properties được tạo ra tại thư mục gốc của project với nội dung như sau:
#Config Database connection #Sun Nov 19 23:12:52 ICT 2017 dbpassword=password database=localhost dbuser=gpcoder
Tài liệu tham khảo: