assets與raw數據讀取

兩者的異同點

res/raw和main/assets的相同點:

1.兩者目錄下的文件在打包後會保存在apk包中,不會被編譯成二進制。

res/raw和main/assets的不同點:

1.res/raw中的文件會被映射到R.java文件中,訪問的時候直接使用資源ID即R.raw.filename;assets文件夾下的文件不會被映射到R.java中,訪問的時候需要AssetManager類。
2.res/raw不可以有目錄結構,而assets則可以有目錄結構,也就是assets目錄下可以再建立文件夾。

示例代碼

/*
 *author:zyc
 *date:20160422
 *
 */
public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private InputStream inputStream;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        findViewById(R.id.bt_assets).setOnClickListener(this);
        findViewById(R.id.bt_raw).setOnClickListener(this);
    }

    private void init() {
        try {
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            byte[] buffer = new byte[1024];
            int size;
            while ((size = inputStream.read(buffer)) != -1) {
                bos.write(buffer, 0, size);
            }
            byte[] byteArray = bos.toByteArray();
            inputStream.close();
            bos.close();
            String result = new String(byteArray, "utf-8");
            Toast.makeText(MainActivity.this, result, Toast.LENGTH_SHORT).show();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.bt_assets:
                try {
                    //讀取assets中的文件
                    AssetManager assets = getResources().getAssets();
                    inputStream = assets.open("as_assets.txt");
                    init();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                break;
            case R.id.bt_raw:
                //讀取raw文件
                inputStream = getResources().openRawResource(R.raw.as);
                init();
                break;
        }
    }
}

運行結果:

這裏寫圖片描述

很簡單的一個筆記,就到這了。

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