在實際開發(fā)中悼嫉,對.properties文件的讀取操作非常頻繁
讀取.properties文件的方式主要有兩種:
【1 : 通過jdk提供的java.util.Properties類】
java.util.Properties類繼承自java.util.HashTable,即實現(xiàn)了Map接口网持,所以,可使用相應(yīng)的方法來操作屬性文件,但不建議使用像put隆嗅、putAll這 兩個方法,因為put方法不僅允許存入String類型的value侯繁,還可以存入Object類型的胖喳。因此java.util.Properties類提 供了getProperty()和setProperty()方法來操作屬性文件,同時使用store或save(已過時)來保存屬性值(把屬性值寫 入.properties配置文件)贮竟。在使用之前丽焊,還需要加載屬性文件,它提供了兩個方法:load和loadFromXML咕别。
1.通過當(dāng)前類加載器的getResourceAsStream方法獲取
InputStream inStream = TestProperties.class.getClassLoader().getResourceAsStream("test.properties");
2.從文件獲取
InputStream inStream = new FileInputStream(new File("filePath"));
3.也是通過類加載器來獲取技健,和第一種一樣
InputStream in = ClassLoader.getSystemResourceAsStream("filePath");
4.在servlet中,還可以通過context來獲取InputStream
InputStream in = context.getResourceAsStream("filePath");
5.通過URL來獲取
URL url = new URL("path");
InputStream inStream = url.openStream();
讀取流:
Properties prop = new Properties();
prop.load(inStream);
String key = prop.getProperty("username");
//String key = (String) prop.get("username");
【2 : 通過java.util.ResourceBundle類讀取】
這種方式比使用Properties要方便一些惰拱〈萍可以通過通過ResourceBundle.getBundle()靜態(tài)方法來獲取,也可以直接從InputStream中讀取
1.通過ResourceBundle.getBundle()靜態(tài)方法來獲取
ResourceBundle是一個抽象類,這種方式來獲取properties屬性文件不需要加.properties后綴名欣孤,只需要文件名即可馋没。
//test為屬性文件名,放在包com.mmq下降传,如果是放在src下披泪,直接用test即可
ResourceBundle resource = ResourceBundle.getBundle("com/mmq/test");
String key = resource.getString("username");
2.從InputStream中讀取
獲取InputStream的方法和上面一樣,不再贅述搬瑰。
ResourceBundle resource = new PropertyResourceBundle(inStream);
注意:在使用中遇到的最大的問題可能是配置文件的路徑問題款票,如果配置文件入在當(dāng)前類所在的包下,那么需要使用包名限定泽论, 如:test.properties入在com.mmq包下艾少,則要使用com/mmq/test.properties(通過Properties來獲 取)或com/mmq/test(通過ResourceBundle來獲纫磴病)缚够;屬性文件在src根目錄下,則直接使用test.properties 或test即可鹦赎。
【實例】
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.Properties;
import java.util.ResourceBundle;
public class TestPro {
public static final String FILE = "system.properties";
public static void main(String[] args) throws IOException {
//讀取方式一:通過當(dāng)前類加載器的getResourceAsStream方法獲取
//InputStream inStream = TestPro.class.getClassLoader().getResourceAsStream(FILE);
//讀取方式二:從文件獲取
//InputStream inStream = new FileInputStream(new File(""));
//讀取方式三:過類加載器來獲取
InputStream inStream = ClassLoader.getSystemResourceAsStream(FILE);
//讀取方式四:在servlet中谍椅,還可以通過context來獲取InputStream
//InputStream in = context.getResourceAsStream("filePath");
//讀取方式五:
//InputStream inStream=new URL("").openStream();
Properties prop = new Properties();
prop.load(inStream);
String key = prop.getProperty("redis.port");
System.out.println(key);
//方式六:通過java.util.ResourceBundle類讀取,這種方式來獲取properties屬性文件不需要加.properties后綴名
ResourceBundle resource = ResourceBundle.getBundle("system");
System.out.println(resource.getString("data.storage.root"));
}
}