兩者的異同點
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;
}
}
}
運行結果:
很簡單的一個筆記,就到這了。