assets目录下和raw目录下文件的区别与读取
来源:互联网 发布:php vendor文件夹 编辑:程序博客网 时间:2024/06/07 10:21
经常会使用到这两个路径下的文件,特别是希望使用这里的数据进行模仿访问互联网读取数据;
两者目录下的文件在打包后会原封不动的保存在apk包中,不会被编译成二进制。
res/raw和assets的不同点:
1.res/raw中的文件会被映射到R.java文件中,访问的时候直接使用资源ID即R.id.filename;assets文件夹下的文件不会被映射到R.java中,访问的时候需要AssetManager类;
2.res/raw不可以有目录结构,而assets则可以有目录结构,assets支持任意深度的子目录,也就是assets目录下可以再建立文件夹;
res/raw:存放通用的文件, 该文件夹内的文件将不会被编译成二进制文件,按原样复制到设备上;
res:用于存放应用程序的资源(如图标、GUI布局等),将被打包到编译后的Java中。不支持深度子目录;
res/xml: 存放通用的XML文件
读取方式不同:
读取res/raw下的文件资源
InputStream is = getResources().openRawResource(R.id.filename);
读取assets下的文件资源
AssetManager am = getAssets();
InputStream is = am.open("filename.txt");
这里读取数据的方便之处在于不用涉及到sd卡,并且不用任何文件读写权限
public class MainActivity extends Activity {private String tag = "MainActivity";private TextView textView1;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);textView1 = (TextView) findViewById(R.id.textView1);findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// readAssetsFile();readRawFile();}});}// / 读取assets目录下的文件private void readAssetsFile() {AssetManager assetManager = null;assetManager = this.getAssets();try {InputStream inputStream = assetManager.open("msg.txt");ByteArrayOutputStream outputStream = null;outputStream = new ByteArrayOutputStream();byte[] buffer = new byte[1024];int length = 0;length = inputStream.read(buffer);while (length != -1) {outputStream.write(buffer, 0, length);length = inputStream.read(buffer);}byte[] data = outputStream.toByteArray();String result = new String(data, "utf-8");Log.i(tag, result);textView1.setText(result);} catch (IOException e) {e.printStackTrace();}}// / 读取res/raw目录下的文件private void readRawFile() {try {InputStream inputStream = getResources().openRawResource(R.raw.msgraw);ByteArrayOutputStream outputStream = null;outputStream = new ByteArrayOutputStream();byte[] buffer = new byte[1024];int length = 0;length = inputStream.read(buffer);while (length != -1) {outputStream.write(buffer, 0, length);length = inputStream.read(buffer);}byte[] data = outputStream.toByteArray();String result = new String(data, "UTF-8");Log.i(tag, result);textView1.setText(result);} catch (IOException e) {e.printStackTrace();}}}
因为编码问题,可以这样读取utf-8的文件:
private String readDataAssets() {try {InputStream is = getAssets().open("msg.txt");ByteArrayOutputStream bo = new ByteArrayOutputStream();int i = is.read();while (i != -1) {bo.write(i);i = is.read();}// 因为文件编码与工程均为UTF-8所以可以这样返回,如果不一致,会出现乱码return bo.toString();} catch (IOException e) {return e.toString();}}
较之两者的区别,一个支持R文件直接读取方便,一个支持任意深度子目录,视实际情况而定;
0 0
- assets目录下和raw目录下文件的区别与读取
- assets目录与res/raw目录下文件的区别
- res/raw与assets目录的区别
- Android读取assets目录下文件
- raw和assets目录的区别
- 目录raw与assets区别
- Android中assets目录和raw目录的区别及其中properties资源文件的读取
- assets目录与res/raw、res/drawable目录的区别
- apk中/res/raw目录与/assets目录的区别
- assets目录和res/raw目录的区别
- android 访问/assets 和/res目录下文件的方法
- 获取assets目录下文件的路径
- 复制ASSETS目录下文件
- Android : assets与res/raw资源目录的区别
- Android : assets与res/raw资源目录的区别
- Android : assets与res/raw资源目录的区别
- Android : assets与res/raw资源目录的区别
- Android读取assets目录下文件数据内容
- 例2.1.1的Numpy实现
- leetcode--N-Queens
- SAP ABAP Excel导入程序源码
- POJ1611(简单并查集)
- 死锁的避免——银行家算法
- assets目录下和raw目录下文件的区别与读取
- java中类包含的作用
- 数据库知识点记录
- java的一些实用工具类(XMLConfiguration/MapUtils/JSON/JSONArray等)
- installEventFilter的使用
- ABAP开发工具自动补齐关键字设置
- Fedora 8下用Yum安装Apache+PHP+MySQL环境
- 2015网易游戏校园招聘笔试题 游戏插件研发岗
- Trust-Region with DogLeg method 信赖域和狗腿法的最优化求解