android應(yīng)用可以將資源存儲(chǔ)在兩個(gè)目錄:res和assets。其中res目錄中的資源只能存儲(chǔ)在相應(yīng)的
子目錄(如res/layout、res/values等)中,不能直接將資源存儲(chǔ)在res目錄中。assets目錄中的
資源可以任意存放,也可以建立任意層次的子目錄。res和assets資源的主要區(qū)別如下。
1、引用資源的方式不同
res目錄中的所有資源都會(huì)在R類的相應(yīng)子類中生成對(duì)應(yīng)的int類型變量,需要使用這些變量
來(lái)引用資源。例如res/layout/main.xml是布局文件資源,會(huì)在R.layout類中生成一個(gè)名為main的
變量,所以需要使用R.layout.main來(lái)引用main.xml。
assets目錄中的資源需要直接使用文件名來(lái)引用,例如assets/xyz.xml、assets/abc/test.db是
assets目錄中的兩個(gè)資源文件,其中abc是assets中的子目錄??梢允褂萌缦碌拇a引用這兩個(gè)資源文件,
并返回與資源文件對(duì)應(yīng)的InputStream對(duì)象,剩下的操作就是普通的Java代碼輸入流操作了。
InputStream is1=getResources().getAssets().open("xyz.xml");
InputStream is2=getResources().getAssets().open("abc/test.db");
2、處理方式不同
res目錄中的資源子目錄除了raw外,其他資源目錄中的資源文件都會(huì)被編譯,這也是為什么
將APK文件解壓后無(wú)法直接查看XML格式資源文件內(nèi)容的原因。而assets與res/raw目錄中的資源
文件不會(huì)做任何處理,所以將APK解壓后,這兩個(gè)目錄中的資源文件都會(huì)保持原樣.
3、子目錄不同
res目錄只能有一層子目錄,而且這些子目錄必須是預(yù)定義的,如res/layout、res/values等都是
合法的,而res/abc,res/xyz并不是合法的資源目錄,在assets目錄中可以建任意層次的子目錄(只受操作系統(tǒng)的限制)