第07章Android中的数据存储

上传人:我*** 文档编号:137883011 上传时间:2020-07-12 格式:PPT 页数:25 大小:2.92MB
返回 下载 相关 举报
第07章Android中的数据存储_第1页
第1页 / 共25页
第07章Android中的数据存储_第2页
第2页 / 共25页
第07章Android中的数据存储_第3页
第3页 / 共25页
第07章Android中的数据存储_第4页
第4页 / 共25页
第07章Android中的数据存储_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《第07章Android中的数据存储》由会员分享,可在线阅读,更多相关《第07章Android中的数据存储(25页珍藏版)》请在金锄头文库上搜索。

1、第7章 Android中的数据存取,主要内容,数据存储,数据存储实例,7.1 文件存储,android是基于java语言的,在java中提供了一套完整的输入输出流操作体系,与文件相关的有FileInputStream,FileOutputStream等,通过这些类可以非常方便地访问磁盘上的文件内容。同样的android也支持这种方式来访问手机上的文件。Android手机中的文件有两个存储位置:内置存储空间和外部SD卡,针对不同位置的文件的存储的有所不同,下面分别对它们的操作。,7.1.1 手机内置存储空间文件的存取,Diagram,Context提供了如下两个方法来打开本应用程序的数据文件夹里

2、的文件IO流。,FileInputStream openFileInput(String name):打开应用程序的数据文件夹下的name文件对应输入流。 FileOutputStream openFileOutput(String name, int mode):打开应用程序的数据文件夹下的name文件对应输出流。,第一参数用于指定文件名称,不能包含路径分隔符“/” ,如果文件不存在,Android 会自动创建它。 第二参数用于指定操作模式,有四种模式。,Context.MODE_PRIVATE=0:默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的

3、内容,如果想把新写入的内容追加到原文件中,可以使用Context.MODE_APPEND 。 Context.MODE_APPEND=32768:模式会检查文件是否存在,存在就往文件追加内容,否则就创建新文件; Context.MODE_WORLD_READABLE =1:表示当前文件可以被其他应用读取; Context.MODE_WORLD_WRITEABLE =2:表示当前文件可以被其他应用写入。,7.1.1 手机内置存储空间文件的存取,如果希望文件被其他应用读和写,可以传入: Context.MODE_WORLD_READABLE + Context.MODE_WORLD_WRITEAB

4、LE,应用程序的数据文件默认保存在/data/data/ /files目录下,文件的后缀名随意。,7.1.1 手机内置存储空间文件的存取,在手机内置存储空间中创建文件、写入内容的一般步骤: (1)调用openFileOutput()方法,传入文件的名称和操作的模式,该方法将会返回一个文件输出流; (2)调用write()方法,向这个文件输出流中写入内容; (3)调用close()方法,关闭文件输出流。,读取手机内置存储空间中文件的一般步骤: (1)调用openFileInput()方法,传入需要读取数据的文件名,该方法将会返回一个文件输入流对象; (2)调用read()方法读取文件的内容; (

5、3)调用close()方法,关闭文件输入流。,7.1.1 手机内置存储空间文件的存取,1、当我们手机上不存在该文件时,我们先写后读与先读后写有区别吗?程序会不会出错? (具体做法:把手机上的content.txt文件删除,然后分别进行先写后读与先读后写操作,观察效果)。 2、不同操作模式的区别,当我们多次执行写入操作时, 文件里的内容是被覆盖还是不断的在文件末尾附加新数据? (具体做法:修改openFileOutput()方法的第二个参数)。,7.1.1 手机内置存储空间文件的存取,7.1.1 案例,单击write按钮,将第一个文本编辑框(writeText)的内容写入到指定的文件中(cont

6、ent.txt),单击read按钮, 从指定的文件中(content.txt)读取数据并显示在第二个文本框(readText)上。,7.1.1 案例,程序清单:FileTestreslayoutactivity_main.xml, ,设置文本输入框最少为两行,设置文本输入框的提示信息,7.1.1 案例, ,程序清单:FileTestreslayoutactivity_main.xml,7.1.1 案例,在MainActivity.java中分别为写入内容和读取内容按钮添加事件处理.,程序清单:FileTestsrcietjxufecnandroidMainActivity.java,publi

7、c class MainActivity extends Activity private Button read, write; private EditText readText, writeText; private String fileName=content.txt; public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); read = (Button) findViewById(R.id.r

8、ead); write = (Button) findViewById(R.id.write); readText = (EditText) findViewById(R.id.readText); writeText = (EditText) findViewById(R.id.writeText); read.setOnClickListener(new OnClickListener() public void onClick(View v) readText.setText(read(); );,设置保存的文件名,获取读取内容按钮,获取写入内容按钮,添加事件处理,将读取的内容显示在文本

9、编辑框上,7.1.1 案例,write.setOnClickListener(new OnClickListener() public void onClick(View v) write(writeText.getText().toString(); ); public void write(String content) try FileOutputStream fos = openFileOutput(fileName, Context.MODE_APPEND); 当第二个参数为Context.MODE_PRIVATE时,后写入的内容会覆盖原有内容。 PrintStream ps = n

10、ew PrintStream(fos); ps.print(content); catch (Exception e) e.printStackTrace(); ,将文本编辑框的内容写入文件,该方法将字符串内容写入文件,程序清单:FileTestsrcietjxufecnandroidMainActivity.java,7.1.1 案例,public String read() StringBuilder sbBuilder = new StringBuilder(); try FileInputStream is = openFileInput(fileName); byte buffer

11、= new byte64; int hasRead; while (hasRead = is.read(buffer) != -1) sbBuilder.append(new String(buffer, 0, hasRead); catch (Exception e) e.printStackTrace(); return sbBuilder.toString(); ,程序清单:FileTest/src/iet/jxufe/cn/android/MainActivity.java,该方法用于读取文件信息,并以字符串返回,获取文件输入流,定义缓冲区的大小,记录每次读取的字节数,7.1.2 SD

12、卡文件存取,对于手机而言,内存非常宝贵,也是比较小的。内存空间会影响到手机的运行速度,通常不建议将数据保存到手机内存中,特别是一些比较大的资源如图片、音频、视频等。那么这些资源存放在哪里呢?存放在外存上,几乎所有的Android设备,都会配有外存设备,最常见的就是SD卡。可以把SD卡看作是移动硬盘或U盘。,读取SD卡上的文件和读取手机上的文件类似,都是通过文件操作流的方式读取的,Android中没有提供单独的SD卡文件操作类,直接使用Java中的文件操作即可,关键是如何确定文件的位置。因为SD卡的可移动性,因此,在访问之前,需要验证手机的SD卡的状态。,要想在模拟器中使用SD卡,首先需要创建一

13、张SD卡(当然不是真的SD卡,只是一个镜像文件)。创建SD卡可以在Eclipse创建模拟器时随同创建,也可以使用Android提供的命令在命令行进行创建。 打开命令行窗口进入android SDK安装路径的tools目录下,输入以下命令在D盘创建一张容量为2G的SD卡,文件后缀名可以随便取,建议使用.img,生成的文件为镜像文件。如果你在环境变量中添加了Android tools目录,则可直接输入相应的命令即可。 mksdcard 2048M D:sdcard.img,7.1.2 SD卡文件存取,读、写SD卡上的文件步骤如下: 1、调用Environment的getExternalStorag

14、eState()方法判断手机上是否插入了SD卡,并且应用程序具有读写SD卡的权限。 Environment.getExternalStorageState()方法用于获取SDCard的状态,如果手机装有SDCard,并且可以进行读写,那么方法返回的状态等于Environment.MEDIA_MOUNTED。 2、调用Environment的getExternalStorageDirectory()方法来获取外部存储器,也就是SD卡的目录。 3、使用FileInputStream、FileOutputStream、FileReader、FileWriter读、写SD卡里的文件。,7.1.2 SD

15、卡文件存取,注意: 文件读取之前,应确认手机上已插入SD卡,对于模拟器来说,可以通过mksdcard命令来创建虚拟存储卡; 为了读、写SD卡上的数据,必须在应用程序的清单文件(AndroidManifest.xml)中添加读、写SD卡的权限。 在SDCard中创建与删除文件权限 往SDCard写入数据权限 ,7.1.2 SD卡文件存取,7.1.2 案例,下面仍然以上面的程序为例,只是这次将数据写入到SD卡上的文件,程序界面布局一致,在此不再列出。关键代码区别在于,在读写之前需先判断手机上是否存在SD卡,然后运用java的输入输出流技术进行读写操作,关键代码如下:,public class Ma

16、inActivity extends Activity private Button read, write; private EditText readText, writeText; private String fileName = content.txt; public void onCreate(Bundle savedInstanceState) super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); read = (Button) findViewById(R.id.read); write = (Button) findViewById(R.id.write); readTe

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号