1. Properties trong Java là gì?
Properties là một lớp con được kế thừa từ lớp cha Hashtable, lớp này được sử dụng để lấy ra thông tin có trong File có định dạng .properties hoặc thể được sử dụng để lấy các thuộc tính của một hệ thống. Lớp Properties cũng là một cấu trúc lưu trữ dữ liệu theo dạng Key => value.
Tương tự như lớp cha Hashtable của nó cũng cho phép chúng ta dựa vào Key để lấy ra giá trị Value có trong Properties. Lớp Properties cung cấp các phương thức để lấy dữ liệu từ tệp thuộc tính và lưu trữ dữ liệu vào tệp thuộc tính (File .properties).
Ưu điểm của lớp Properties là Không cần biên dịch nếu thông tin được thay đổi từ tệp thuộc tính (File .properties) – điều này nghĩa là bạn sẽ không cần biên dịch lại chương trình Java khi có thông tin thay đổi trong tệp thuộc tính (File .properties), bời vì mặc định nó được sử dụng để lưu trữ thông tin mà sẽ được thay đổi thường xuyên.
Lớp Properties này thuộc trong thư viện java.util và để sử dụng được lớp Properties trong thư viện trên ta cần nhập thư viện: import java.util. *;
2. Khai báo lớp Properties trong Java
Lớp Properties() đã được xây dựng sẵn trong Java, và để khai báo và sử dụng được lớp này ta chỉ cần nhập thư viện java.util.* vào chương trình và gọi đến tên lớp Properties() – cú pháp khai báo lớp Properties() như sau:
Properties p = new Properties();
Trong đó:
- p là tên cần đặt cho Properties cần khởi tạo
Lớp Properties() tồn tại 2 constructor và được mô tả ở bảng bên dưới đây:
Hàm khởi tạo | Mô tả |
Properties() | Tạo ra một đối tượng Properties rỗng và không có giá trị mặc định. |
Properties(Properties defaults) | Tạo ra một đối tượng Properties được khởi tạo kèm với giá trị mặc định. |
Lớp Properties() được sử dụng để lấy ra thông tin có trong File có định dạng .properties vì vậy, trong ví dụ khai báo về lớp Properties() này chúng ta sẽ cần tạo ra một file mẫu có tên là user.properties nội dung của file đó sẽ như sau:
- File user.properties
user=root pass=123123
Bây giờ, chúng ta sẽ bắt tay vào tạo ra một chương trình Java sử dụng lớp Properties() để lấy ra các trường thông tin có trong File user.properties ở trên!
import java.util.*; import java.io.*; public class Main { public static void main(String[] args)throws Exception{ //Doc file user.properties FileReader user_properties = new FileReader("user.properties"); //Khoi tao lop Properties Properties p = new Properties(); //Nap file user.properties vao trong Properties p.load(user_properties); //Lay ra gia tri cua thuoc tinh user va password co trong file user.properties System.out.println(p.getProperty("user")); System.out.println(p.getProperty("password")); } }
Kết quả:
root 123123
Kể từ bây giờ nếu bạn thay đổi giá trị của tệp thuộc tính user.properties, bạn sẽ không cần phải biên dịch lại chương trình Java trên nữa. Bởi vì nó được sử dụng để lưu trữ thông tin mà sẽ được thay đổi thường xuyên.
3. Thao tác với Properties trong Java
Một trong những thao tác của lớp Properties() thường được sử dụng đó là lấy ra thông tin liên quan đến hệ thống, ngoài ra nó còn được sử dụng để tạo ra các tệp thuộc tính có phần mở rộng .properties.
3.1 Lấy thông tin thuộc tính của hệ thống trong Java
Một chương trình Java khi được thực thi sẽ có rất nhiều thông tin liên quan đến chương trình đó, và để lấy ra các thông tin thuộc tính của hệ thống trong Java ta sẽ cần sử dụng đến lớp Properties() để làm điều này.
Các thông tin lấy được có thể là thông tin về môi trường, thông tin về đường dẫn thư viện, thông tin về phiên bản vm.version….Chương trình dưới đây sẽ lấy ra đầy đủ các thông tin thuộc tính của hệ thống trong Java:
import java.util.*; import java.io.*; public class Main { public static void main(String[] args)throws Exception{ //Khoi tao lop Properties la cac thuoc tinh cua he thong Properties p = System.getProperties(); //Luu cac thong tin vao set de duyet Set set = p.entrySet(); Iterator itr=set.iterator(); //Duyet qua cac thong tin thuoc tinh cua he thong while(itr.hasNext()){ Map.Entry entry=(Map.Entry)itr.next(); System.out.println(entry.getKey()+" = "+entry.getValue()); } } }
Kết quả:
java.specification.version = 18 sun.cpu.isalist = amd64 sun.jnu.encoding = Cp1252 java.class.path = C:\Users\Administrator\Desktop\Bai Tap Java\Main\build\classes java.vm.vendor = Oracle Corporation sun.arch.data.model = 64 user.variant = java.vendor.url = https://java.oracle.com/ user.country.format = VN java.vm.specification.version = 18 os.name = Windows 11 sun.java.launcher = SUN_STANDARD user.country = US sun.boot.library.path = C:\Program Files\Java\jdk-18.0.1\bin sun.java.command = Main jdk.debug = release sun.cpu.endian = little user.home = C:\Users\Administrator user.language = en java.specification.vendor = Oracle Corporation jdk.module.path = C:\Users\Administrator\Desktop\Bai Tap Java\Main\build\classes java.version.date = 2022-04-19 java.home = C:\Program Files\Java\jdk-18.0.1 file.separator = \ java.vm.compressedOopsMode = 32-bit line.separator = ...............................................
3.2 Tạo tệp thuộc tính trong Java
Chúng ta hoàn toàn có thế sử dụng lớp Properties() để tạo ra các tệp có định dạng .properties – tệp này sẽ lưu trữ các thông tin giá trị thuộc tính do ta tự định nghĩa.
Các bạn có thể tạo ra các tệp .properties để lưu trữ thông tin tài khoản, thông tin đăng nhập, thông tin cài đặt… để thuận tiện cho việc sử dụng sau này. Như ví dụ dưới đây, sẽ tạo ra một tệp info..properties để tạo ra tệp thuộc tính lưu trữ thông tin họ tên (name) và tuổi (age) như sau:
import java.util.*; import java.io.*; public class Main { public static void main(String[] args)throws Exception{ //Khoi tao thuoc tinh Properties p = new Properties(); //Dat cac gia tri cho cac thuoc tinh can them p.setProperty("name","Chu Minh Nam"); p.setProperty("age","20 tuoi"); //Luu lai cac thuoc tinh tren vao file info.properties p.store(new FileWriter("info.properties"),"Thuoc tinh NAME va AGE"); } }
Kết quả tệp info..properties như sau:
Thuoc tinh NAME va AGE name = Chu Minh Nam age = 20 tuoi
4. Các phương thức của Properties trong Java
Trong các ví dụ trên, chúng ta đã sử dụng nhiều phương thức của lớp Properties() như: setProperty(), load(), store()…tuy nhiên, lớp này còn cung cấp thêm cho chúng ta nhiều hơn các phương thức nữa, các phương thức thường sử dụng của lớp Properties() được liệt kê ở bảng dưới đây:
Phương thức | Mô tả |
String getProperty(String key) | Lấy ra giá trị value của của một thuộc tính dựa vào key. Nếu key đó không tồn tại thì trả về NULL. |
String getProperty(String key, String defaultProperty) | Lấy ra giá trị value của của một thuộc tính dựa vào key. Nếu key đó không tồn tại thì trả về defaultProperty. |
void list(PrintStream streamOut) | Gửi property list tới output stream mà liên kết tới streamOut |
void load(InputStream streamIn) | Nạp tải dữ liệu từ đối tượng InputStream. |
public void load(Reader r) | Nạp tải dữ liệu từ đối tượng Reader. |
Enumeration propertyNames() | Lấy ra tất cả các key – bao gồm cả các key trong property list mặc định |
Object setProperty(String key, String value) | Thêm một thuộc tính (bao gồm key và value) vào trong đối tượng Property |
void store(OutputStream streamOut, String description) | Ghi các thuộc tính trong đối tượng OutputStream. |