Android Studio assets目錄、raw目錄

assets與res/raw不同

assets目錄是Android的一種特殊目錄,用於放置APP所需的固定文件,且該文件被打包到APK中時,不會被編碼到二進制文件。
Android還存在一種放置在res下的raw目錄,該目錄與assets目錄不同。
注意點:
1、 assets目錄不會被映射到R中,因此,資源無法通過R.id方式獲取,必須要通過AssetManager進行操作與獲取;res/raw目錄下的資源會被映射到R中,可以通過getResource()方法獲取資源。
2、 多級目錄:assets下可以有多級目錄,res/raw下不可以有多級目錄。
3、 編碼(都不會被編碼):assets目錄下資源不會被二進制編碼;res/raw應該也不會被編碼。

Android Studio 添加assets目錄的2種方法

main目錄上右擊:
1、 直接在src/main下新建assets目錄:

由於在工程創建時,在工程文件裏已經添加了對應的資源目錄說明:

Paste_Image.png

所以,天然的資源目錄。

2、 通過嚮導添加:

 

 

添加res/raw目錄:

 

 

 

添加完成。

assets內資源使用方法

1、 資源使用

AssetManager am = getAssets();  
InputStream is = am.open("filename");  

獲取到輸入流。

2、 信息獲取
通過am.list(“”)得到assets目錄下的所有文件和子目錄名稱的數組,通過am.list(SubFolderName),得到assets/SubFolderName下所有的文件和子目錄名稱的數組。
通過am.openFd(fileName)得到的AssetFileDescriptor對象來獲得fileName文件的信息,例如長度等。
AssetFileDescriptor 能夠完成對文件的其他一些操作,可以關注該類。

AssetManager接口介紹:

final String[] list(String path)  //返回指定路徑下的所有文件及目錄名

final InputStream open(String fileName) //使用 ACCESS_STREAMING模式打開assets下的指定文件

final InputStream open(String fileName, int accessMode) //使用顯示的訪問模式打開assets下的指定文件

簡單應用:
1、結合WebView加載assets目錄下的網頁:
//加載assets/win8_Demo/目錄下的index.html網頁
webView.loadUrl("file:///android_asset/helloworld.html");
說明:可加載assets目錄下的網頁,css,js,圖片等文件也會的加載。

assets中複製文件方法

public boolean copyFilesFassetsTan(Context context, String newPath) {
        int successNum = 0;
        L.w("tan", "begin");
        String[] fileNames = {"rnsb1.mp4", "clsb2.mp4", "kzjc3.mp4", "lsjc4.mp4", "qdlj5.mp4"
                , "aqmjc6.mp4", "aqfjc7.mp4", "wxjc8.mp4", "xyjc9.mp4", "djh10.mp4", "mjrq11.mp4"};
        try {//

            for (String fileName : fileNames) {
                InputStream is = context.getAssets().open(fileName);
                FileOutputStream fos = new FileOutputStream(new File(newPath + "/" + fileName));
                byte[] buffer = new byte[1024];
                int byteCount = 0;
                while ((byteCount = is.read(buffer)) != -1) {//循環從輸入流讀取 buffer字節
                    fos.write(buffer, 0, byteCount);//將讀取的輸入流寫入到輸出流
                }
                fos.flush();//刷新緩衝區
                is.close();
                fos.close();
                successNum++;
            }

        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            //如果捕捉到錯誤則通知UI線程
            //MainActivity.handler.sendEmptyMessage(COPY_FALSE);
        }
        L.w("tan", "end");
        if (successNum == fileNames.length) {
            return true;
        } else {
            return false;
        }
    }

 

res/raw資源使用

InputStream is = getResources().openRawResource(R.id.fileNameID) ;
//R.id.fileNameID
爲需要訪問的文件對應的資源ID

獲取到輸入流,即可使用。

VideoView播放:

VideoView.setVideoUri(Uri.parse("android.resource://" + getpackageName() + "/" + R.raw.movie));



作者:heguorui
鏈接:https://www.jianshu.com/p/5974fcf88170
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章