Android文件读写操作(assets 文件、 raw文件、内部存储文件、外部存储文件)

您所在的位置:网站首页 安卓写txt文件 Android文件读写操作(assets 文件、 raw文件、内部存储文件、外部存储文件)

Android文件读写操作(assets 文件、 raw文件、内部存储文件、外部存储文件)

2024-07-16 23:43:57| 来源: 网络整理| 查看: 265

Android中的文件读写操作是不可或缺的,每个应用都会涉及到读写操作。这里将读写操作分成了四个部分

assets文件夹中文件数据的读取

raw文件夹中的文件数据的读取

Android内部存储文件的读写

Android外部存储文件的读写

一、读取assets文件夹中的数据

assets文件夹 和 res文件夹 的区别:

Android系统不为assets文件夹下的文件生成ID。如果使用assets下的文件,需要指定文件的路径和文件名。存放在assets文件夹中的资源不会生成id,但是存放在res目录下的资源会生成id。

assets 和 res下的文件都是只能读不能写 。

Android中的资源文件主要分为两类,一种出于assets目录下,称为原生文件,这类文件在被打包成apk文件时是不会进行压缩的;另一类则是res下的文件,这类文件在打包成apk文件时,会进行小内存优化 。

虽然通过一个字符串路径来获取这个目录下的文件描述符,访问的速度会慢。但是把一些文件放在这个目录下会使一些操作更加方便,比方说拷贝一个数据库文件到系统内存中。要注意的是,你无法在Android XML文件中引用到assets目录下的文件,只能通过AssetManager来访问这些文件。数据库文件和游戏数据等放在这个目录下是比较合适的。

当我们使用Android studio创建Android工程项目的时候,assets文件夹不会自动创建,需要我们手动创建。这时我们必须在main目录下创建assets文件夹。

如图:

这里写图片描述

当我们使用Eclipse创建Android工程项目的时候,assets文件夹会自动创建。如果没有创建,我们也可以手动创建,目录如图:

这里写图片描述

文件夹创建好以后,我们往文件夹中存放文件,然后就可以通过代码获取到assets文件夹中的数据了

try { InputStream is = getResources().getAssets().open("test.txt"); InputStreamReader isr = new InputStreamReader(is,"UTF-8"); BufferedReader br = new BufferedReader(isr); String str = ""; while((str = br.readLine()) != null){ tv.append(str+"\n"); //把test文档中的内容显示在tv中 } } catch (IOException e) { e.printStackTrace(); }

二、读取raw文件夹中的数据

raw文件夹是属于res目录下的,其中的资源会自动生成id,因此我们引用id就可以使用了。如果res目录下没有raw文件夹,我们可以自行在res目录下创建。这里不用区分编辑器目录的差别。目录结构如下:

这里写图片描述

获取资源代码如下:

try { InputStream is = getResources().openRawResource(R.raw.test); InputStreamReader isr = new InputStreamReader(is,"UTF-8"); BufferedReader br = new BufferedReader(isr); String str = ""; while((str = br.readLine()) != null){ tv.append(str+"\n"); } } catch (IOException e) { e.printStackTrace(); }

由于raw是Resources (res)的子目录,Android会自动的为这目录中的所有资源文件生成一个ID,这个ID会被存储在R类当中,作为一个文件的引用。这意味着这个资源文件可以很容易的被Android的类和方法访问到,甚至在Android XML文件中你也可以@raw/的形式引用到它。在Android中,使用ID是访问一个文件最快捷的方式。MP3和Ogg文件放在这个目录下是比较合适的。

三、内部存储文件的读写

Android内部存储文件指的是:应用程序安装后,都会在Android手机系统的data/data/目录下新建一个以应用包名为名的文件夹,在这个文件夹中会包含该应用程序的文件资源,我们称之为内部存储文件,用于区分SD卡 例如我们使用的例子,其目录为:data/data/redowu.file/

这里写图片描述

读写内部存储的文件的操作过程如下:

写入:

private String filename = "test.txt"; try { FileOutputStream fos = openFileOutput(filename, Context.MODE_PRIVATE); OutputStreamWriter osw = new OutputStreamWriter(fos,"UTF-8"); osw.write(et.getText().toString()); osw.flush(); fos.flush(); //flush是为了输出缓冲区中所有的内容 osw.close(); fos.close(); //写入完成后,将两个输出关闭 } catch (FileNotFoundException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }

读取:

try { FileInputStream fis = openFileInput(filename); InputStreamReader isr = new InputStreamReader(fis,"UTF-8"); char[] input = new char[fis.available()]; //available()用于获取filename内容的长度 isr.read(input); //读取并存储到input中 isr.close(); fis.close();//读取完成后关闭 String str = new String(input); //将读取并存放在input中的数据转换成String输出 tv.setText(str); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }

这里写图片描述

四、外部存储文件的读写

外部存储指的是SD卡。在读写SD卡中的文件数据前,我们要先在AndroidManifest中声明使用SD卡的权限

SD卡文件的写入

File sdcard = Environment.getExternalStorageDirectory();//获取sd卡路径 File myfile = new File(sdcard,"file.txt"); //实例化一个File if (sdcard.exists()){ //判断是否有sd卡 try { myfile.createNewFile(); //创建myfile.txt FileOutputStream fos = new FileOutputStream(myfile); OutputStreamWriter osw = new OutputStreamWriter(fos,"UTF-8"); osw.write(et.getText().toString()); osw.flush(); fos.flush(); osw.close(); fos.close(); } catch (IOException e) { e.printStackTrace(); } }else { System.out.println("没有sd卡"); }

file.txt是创建在sd卡的根目录的,我们可以在ddms中查看,这里我们需要查找sdcard的目录。我使用的虚拟机sd卡的目录查找步骤:

首先在虚拟机根目录能直接看到sdcard目录,然后我们查看他的info指向目录:/storage/emulated/legacy

接下来我们进入/storage/emulated/legacy目录,但是啥都没有,但是这个目录的info指向了另一个目录:/mnt/shell/emulated/0

我们进入/mnt/shell/emulated/0,此时我们才算找到了sdcard的真实目录,file.txt就创建在这个目录下

这里写图片描述

SD卡文件数据的读取

File sdcard = Environment.getExternalStorageDirectory(); File file = new File(sdcard,"file.txt"); try { FileInputStream fis = new FileInputStream(file); InputStreamReader isr = new InputStreamReader(fis,"UTF-8"); char[] input = new char[fis.available()]; isr.read(input); isr.close(); fis.close(); String str = new String(input); tv.setText(str); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }

注意:

InputStream 、OutputStream、FileInputStream 、FileOutputStream操作的是字节流

InputStreamReader 、OutputStreamWriter操作的是字符流

英文一个字符占一个字节,而中文一个字符占俩字节。如果用stream,读出来的英语再倒也罢了,但读出来的中文就会出现乱码。



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭