Lớp Properties trong java

1. 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> {
 
}

2. 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 

3. 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 thcMô 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.

4. Ví dụ minh họa

4.1. 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=VietMX Blog
siteUrl=maixuanviet.com

Viết chương trình đọc file properties trên:

PropertiesExample1.java

package com.maixuanviet.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:

VietMX Blog
maixuanviet.com

4.2. Ví dụ về lớp Properties lấy các thuộc tính của hệ thống

package com.maixuanviet.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
.....

4.3. Ví dụ sử dụng lớp Properties để tạo file .properties

package com.maixuanviet.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", "maixuanviet");
            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 2018
dbpassword=password
database=localhost
dbuser=maixuanviet