android應(yīng)用可以將資源存儲在兩個目錄:res和assets葡公。其中res目錄中的資源只能存儲在相應(yīng)的
子目錄(如res/layout、res/values等)中涵亏,不能直接將資源存儲在res目錄中蒲凶。assets目錄中的
資源可以任意存放,也可以建立任意層次的子目錄宠默。res和assets資源的主要區(qū)別如下灵巧。
1抹沪、引用資源的方式不同
res目錄中的所有資源都會在R類的相應(yīng)子類中生成對應(yīng)的int類型變量瓤球,需要使用這些變量
來引用資源。例如res/layout/main.xml是布局文件資源噪馏,會在R.layout類中生成一個名為main的
變量绿饵,所以需要使用R.layout.main來引用main.xml。
assets目錄中的資源需要直接使用文件名來引用董济,例如assets/xyz.xml要门、assets/abc/test.db是
assets目錄中的兩個資源文件,其中abc是assets中的子目錄封豪〕次粒可以使用如下的代碼引用這兩個資源文件,
并返回與資源文件對應(yīng)的InputStream對象缘琅,剩下的操作就是普通的Java代碼輸入流操作了廓推。
InputStream is1=getResources().getAssets().open("xyz.xml");
InputStream is2=getResources().getAssets().open("abc/test.db");
2、處理方式不同
res目錄中的資源子目錄除了raw外呻纹,其他資源目錄中的資源文件都會被編譯专缠,這也是為什么
將APK文件解壓后無法直接查看XML格式資源文件內(nèi)容的原因。而assets與res/raw目錄中的資源
文件不會做任何處理哥力,所以將APK解壓后墩弯,這兩個目錄中的資源文件都會保持原樣.
3蟀淮、子目錄不同
res目錄只能有一層子目錄钞澳,而且這些子目錄必須是預(yù)定義的涨缚,如res/layout脓魏、res/values等都是
合法的,而res/abc,res/xyz并不是合法的資源目錄茂翔,在assets目錄中可以建任意層次的子目錄(只受操作系統(tǒng)的限制)