android 中资源文件assets文件和raw文件的区别

本文详细对比了Android中raw和assets文件夹的区别与用法,包括它们的存储特点、访问方式及适用场景,并提供了具体的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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文件:可通过@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 "文件读写失败";
}
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值