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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM