raw和assets文件的存储位置如下图:
相同点:
他们会被拷贝到APK文件中,不会随着APK的编译像其他文件一样被编译成二进制文件
不同点:
1.assets文件可创建目录结构,可动态获取列出资源(getAssets().list(String path)),raw文件不行
2.assets下面的文件不会被编译,通过路径可以去访问其中的内容。raw中文件会自动编译,我们可以在R.java文件中找到对应的ID。
3,获取资源文件的方式不同
Assets: AssetManager assetManager = getAssets().open();
Raw: InputStream inputStream = getResources().openRawResource(R.raw.demo);
Raw: InputStream inputStream = getResources().openRawResource(R.raw.demo);
使用场景:
raw文件:可通过@raw进行引用,可存放一些MP3,OOG,等文件
assets文件:不会生成ID,访问速度慢,可通过AssetManage 进行访问,通常存放一些数据库,和游戏数据
实例如下:
public class AeesrtsAndRawActivity extends Activity {
private EditText et1, et2;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
readAssets();
readRaw();
}
/**
* 使用Assets中的文件
*/
private void readAssets() {
et1 = (EditText) findViewById(R.id.et1);
AssetManager assetManager = getAssets();
try {
InputStream inputStream = assetManager.open("demo.txt");
et1.setText(read(inputStream));
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 使用Raw中的文件
*/
private void readRaw() {
et2 = (EditText) findViewById(R.id.et2);
InputStream inputStream = getResources().openRawResource(R.raw.demo);
et2.setText(read(inputStream));
}
/**
* 进行IO流读写
*
* @param inputStream
* @return oStream.toString() or “文件读写失败”
*/
private String read(InputStream inputStream) {
try {
ByteArrayOutputStream oStream = new ByteArrayOutputStream();
int length;
while ((length = inputStream.read()) != -1) {
oStream.write(length);
}
return oStream.toString("GBK");
} catch (IOException e) {
return "文件读写失败";
}
}
}
private EditText et1, et2;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
readAssets();
readRaw();
}
/**
* 使用Assets中的文件
*/
private void readAssets() {
et1 = (EditText) findViewById(R.id.et1);
AssetManager assetManager = getAssets();
try {
InputStream inputStream = assetManager.open("demo.txt");
et1.setText(read(inputStream));
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 使用Raw中的文件
*/
private void readRaw() {
et2 = (EditText) findViewById(R.id.et2);
InputStream inputStream = getResources().openRawResource(R.raw.demo);
et2.setText(read(inputStream));
}
/**
* 进行IO流读写
*
* @param inputStream
* @return oStream.toString() or “文件读写失败”
*/
private String read(InputStream inputStream) {
try {
ByteArrayOutputStream oStream = new ByteArrayOutputStream();
int length;
while ((length = inputStream.read()) != -1) {
oStream.write(length);
}
return oStream.toString("GBK");
} catch (IOException e) {
return "文件读写失败";
}
}
}