在Android項目開發中,為了一些公用資源使用方便,可以在assets資源文件夾中將需要用到的資源寫成.properties或者.json的文件形式,並進行讀取使用。在做html5+javascript+android的混合開發中,一般html5和javascript以及相關資源可以存放在Assets文件夾內,因此assets的使用十分必要。
由於AndroidStudio與Eclipse不同,項目中默認沒有assets文件夾,因此首先需要在工程目錄下添加assets文件夾,具體位置在:src/main/assets。這個位置可以通過XXX.iml 設置assets的目錄( XXX代表項目名),設置如下:<option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets" />
也可以通過AndroidStudio自動添加,步驟如下:
1. 在app項目欄上用鼠標右鍵打開選擇菜單,點選New,在下級菜單中選擇Folder,再下級菜單中選擇Assets Folder




這樣,assets文件夾就創建好了。
接下來為大家介紹一下properties文件的讀取。
AndroidStudio讀取.properties配置文件在實際的開發中使用的很多,總結了一下,常用的有以下兩種方法:
一、通過jdk提供的java.util.Properties類。
此類繼承自java.util.HashTable,即實現了Map接口,所以,可使用相應的方法來操作屬性文件,但不建議使用像put、putAll這兩個方法,因為put方法不僅允許存入String類型的value,還可以存入Object類型的。因此java.util.Properties類提供了getProperty()和setProperty()方法來操作屬性文件,同時使用store或save(已過時)來保存屬性值(把屬性值寫入.properties配置文件)。在使用之前,還需要加載屬性文件,它提供了兩個方法:load和loadFromXML。
load有兩個方法的重載:load(InputStream inStream)、load(Reader reader),所以,可根據不同的方式來加載屬性文件。
可根據不同的方式來獲取InputStream,如:
1、通過當前類加載器的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 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");
二、通過java.util.ResourceBundle類來讀取,這種方式比使用Properties要方便一些。
1、通過ResourceBundle.getBundle()靜態方法來獲取(ResourceBundle是一個抽象類),這種方式來獲取properties屬性文件不需要加.properties后綴名,只需要文件名即可。
ResourceBundle resource = ResourceBundle.getBundle("com/mmq/test");//test為屬性文件名,放在包com.mmq下,如果是放在src下,直接用test即可
String key = resource.getString("username");
2、從inputstream中獲取內容,根據第一種方法中的獲取到instream后
ResourceBundle resource = new PropertyResourceBundle(inStream);
然后就可以獲取具體內容了。
注意:在使用中遇到的最大的問題可能是配置文件的路徑問題,如果配置文件入在當前類所在的包下,那么需要使用包名限定,如:test.properties入在com.mmq包下,則要使用com/mmq/test.properties(通過Properties來獲取)或com/mmq/test(通過ResourceBundle來獲取);屬性文件在src根目錄下,則直接使用test.properties或test即可。
在本介紹中,我們把.properties文件放在src/main/assets路徑下,獲取方法:
-
public
static Properties loadProperties(Context context) {
-
Properties properties =
new Properties();
-
try {
-
InputStream
in = context.getAssets().open(
"test.properties");
-
properties.load(
in);
-
in.close();
-
}
-
catch (IOException e) {
-
e.printStackTrace();
-
return
null;
-
}
-
return properties;
-
}
