Hướng dẫn đọc file properties trong java

Trong Java khái niệm Properties rất quen thuộc đối với các bạn lập trình JAVA.Properties là một lớp giúp chúng ta đọc được các thông số trong file có đuôi là properties.

Vậy có khi nào các bạn nghĩ lý do vì sao chúng ta cần phải đọc file properties để thêm rắc rối ? Và cần phải viết thêm code để đọc file này,lấy những thông số trong file này ra để sử dụng? 

Mình sẽ lấy một ví dụ đơn giản để các bạn thật dễ hiểu.Khi chúng ta muốn upload một ứng dụng java web lên host thì chắc chắn rằng sẽ có những thông số sẽ thay đổi như url,username,password,name database (tên database).Đây là những thông số để kết nối với cơ sở dữ liệu.

Vậy nếu các bạn fix cứng những thông số này trong file java thì người ta gọi là hard code.Nghĩa là muốn thay đổi thì các bạn cần phải vào file java để sửa code,và có một điều đáng lưu ý nữa là khi ứng dụng java web của chúng ta chạy lên,nhưng file java sẽ được biên dịch thành mã biên dịch mã nguồn thành bytecode,(bytecode sau đó sẽ được môi trường thực thi),như vậy chúng ta sẽ không đọc được file java để config.Ví nó có dạng như thế này : (các bạn chú ý hình dưới )

Vậy bay giờ chúng ta sẽ nghĩ ngay tới việc,những thông số thường xuyên thay đổi trong quá trình code thì nên đưa ra những thông số ở 1 file nào đó ví dụ như txt,properties,xml vì những file này trong java sẽ không biên dịch.Ok.

Giờ chúng ta sẽ bắt đầu viết một class để sử dụng đọc file properties trong java nhé.Mình sẽ hướng dẫn các bạn cách để tạo ra một class dùng làm thư viện luôn,sau này chúng ta muốn sử dụng thì chỉ việc copy file này và sử dụng.

Nào,các bạn sẽ code theo mình nhé, đầu tiên các bạn sẽ tạo ra 1 file properties có tên là config.properties ,và chúng ta nên đặt trong thư mục WEB-INF/classes.(Các classpath mặc định của một webapp) Ví dụ của ứng dụng web /WEB-INF/lib /WEB-INF/classes đối với một Dynamic web projects , nếu properties file là webapp cụ thể, tốt nhất là đặt nó trong /WEB-INF/classes. Nếu bạn đang phát triển một dự án WAR tiêu chuẩn trong một IDE, thả nó vào src thư mục (thư mục nguồn của dự án). Nếu bạn đang sử dụng một dự án Maven, thì đặt nó vào /main/resources.Đối với file properties thì sẽ gồm 2 tham số.Đầu tiên sẽ là key ,thứ 2 là giá trị (value).Lưu ý ko có dấu "" nhé các bạn.

Và đây là code của file này :

#mysql connect
url=jdbc:mysql://localhost:3306/namedatabase?useUnicode=true&characterEncoding=UTF-8
pass=
user=root

Bây giờ,vấn đề làm sao để chúng ta đọc được những thông số này trong file config properties thì các bạn sẽ tạo ra một class như mình hướng dẫn ,class ReadPropertiesLibrary có nhiệm vụ đọc file.Và toàn bộ code như sau :

package library;

import java.util.Properties;

public class ReadPropertiesLibrary {
	
	public Properties readFileProperties(){
		ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
		Properties properties = new Properties();
		try {
			properties.load(classLoader.getResourceAsStream("/config.properties"));
			String user = properties.getProperty("user");
			String pass = properties.getProperty("pass");
			String url = properties.getProperty("url");
		} catch (Exception e) {
			System.out.println(e.getMessage());
		}
		return properties; 
	}
}

Lưu ý là chỉ khi các bạn sử dụng đối tượng của ClassLoader thì chúng ta mới sử dụng bắt đầu bằng dấu /.Vậy class ClassLoader là gì ? Java ClassLoader tiến hành nạp một tệp class của java vào máy ảo (JVM). Chỉ đơn giản như vậy.Nếu các bạn muốn tìm hiểu thì sẽ  click vào link này.

Chúng ta sẽ đọc những thông số trong file properties bằng cách sử dụng đối tượng properties và dùng phương thức getProperty(“namekey”) để lấy những thông số đó ra.

Bay giờ chúng ta sẽ tiến hành chạy chương trình xem đã lấy được những thông số này ra chưa nhé. Lưu ý ở đây khi chúng ta chạy ứng dụng java web trên server thì nó mới lấy được nhưng thông số này ra,nếu sử dụng method main và chạy ứng dụng thì sẽ trả về bằng null.

 

package library;

import java.util.Properties;

public class ReadPropertiesLibrary {
	
	public Properties readFileProperties(){
		ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
		Properties properties = new Properties();
		try {
			properties.load(classLoader.getResourceAsStream("/config.properties"));
			String user = properties.getProperty("user");
			String pass = properties.getProperty("pass");
			String url = properties.getProperty("url");
			
			System.out.println("USER : "+user);
			System.out.println("PASS : "+pass);
			System.out.println("URL : "+url);
		} catch (Exception e) {
			System.out.println(e.getMessage());
		}
		return properties; 
	}
	public static void main(String[] args) {
		ReadPropertiesLibrary propertiesLibrary = new ReadPropertiesLibrary();
		propertiesLibrary.readFileProperties();
	}
}

Khi chúng ta chạy ứng dụng java web thì các bạn thấy rằng chúng ta đã lấy ra được những thông số trong file  properties chính xác :

Sau đây là cấu trúc dự án.

Nếu bạn nào chạy ở method main thì đây là video hướng dẫn nhé :

Hy vọng bài viết này sẽ giúp ích các bạn,trong quá trình thực hiện có gì thắc mắc các bạn comment bên dưới bài viết nhé.Chúc các bạn thực hiện thành công! Ở bài sau mình sẽ hướng dẫn các bạn cách để upload một ứng dụng java web lên host.

 

 

x