android工程下assets與raw文件夾

在應用的開發中,當我們創建一個新的Android工程後,我們會發現工程中包含了一個目錄assets,另外當我們察看一些示例工程的時候,有時會發現在該工程的資源目錄下會有一個raw目錄(res/raw)。那麼assets和raw目錄有什麼用處呢?下面筆者將給與解釋。

assets和res/raw工程目錄下都可以放一些小於1M的文件(2.3版本以前要求,否則將不能讀出數據。),這些文件將被打包到APK中應用使用。assets目錄下的文件將不做任何處理被打包,而res/raw目錄下的文件,有些文檔說會編譯爲二進制,有些文檔說不會。筆者認爲這些不是很重要,一個原則那就是最好不要將過大的文件打包到APK中,如果你的資源很大,例如視頻等等,應該單獨存儲在文件系統中。這兩個目錄的區別主要是assets目錄下的文件不會被映射到R.java中,即系統不會自動爲其生成一個資源ID.另一方面,由於系統會爲res目錄下的所有資源生成相應的資源ID,所以raw中的文件也不例外。綜上,我們可以通過ID去訪問res/raw目錄中的任何文件,而assets目錄中的文件就需要藉助AssetManager去訪問了。最後二者還有一個區別,assets目錄允許下面有多級子目錄,而res/raw下不允許存在目錄結構。

讀取文件舉例 :
1.assets目錄

AssetManager a = getAssets() ;
//fileName爲assets目錄下需要訪問的文件的名稱
InputStream is = a.open(fileName) ;
//然後就可以通過輸入流來讀取fileName的內容了。

另外,我們可以通過a.openFd(fileName)得到的AssetFileDescriptor對象來獲得fileName文件的信息,例如長度等。我們也可以通過a.list(“”)得到assets目錄下的所有文件和子目錄名稱的數組,通過a.list(SubFolderName), 得到assets/SubFolderName下所有的文件和子目錄名稱的數組。

2.res/raw目錄

InputStream is = getResources().openRawResource(R.id.fileNameID) ;
//R.id.fileNameID爲需要訪問的文件對應的資源ID.接着我們就可以通過輸入流來讀取相應文件的內容了。

補充 :
如果我們必須要將大於1M的文件打包到APK中,如果當前Android OS版本有1M容量的限制那我們怎麼辦?條條大陸通羅馬,這種情況下我們可以將這些大文件事先分割成多個小於1M的文件,
然後打包。在程序需要讀取的時候,我們可以將這些分割文件依次讀出,然後合併。這樣非常麻煩。總之,APK中不建議打包Size很大的文件。

播放RAW目錄下視頻問題
mVideoView = (Simple) findViewById(R.id.videoView);
mVideoView.setOnCompletionListener(this);
mVideoView.setOnPreparedListener(this);
mUri = Uri.parse(“android.resource://” + getPackageName() + “/”+ R.raw.demodave);
mVideoView.setVideoURI(mUri);

Android中asset文件夾和raw文件夾區別
http://blog.csdn.net/leichelle/article/details/7884052

發佈了20 篇原創文章 · 獲贊 10 · 訪問量 34萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章