《数据存储与访问.ppt》由会员分享,可在线阅读,更多相关《数据存储与访问.ppt(177页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第8章 数据存储与访问 本章学习目标:本章学习目标:n掌握掌握SharedPreferences的使用方法的使用方法n掌握各种文件存储的区别与适用情况掌握各种文件存储的区别与适用情况n了解了解SQLite数据库的特点和体系结构数据库的特点和体系结构n掌握掌握SQLite数据库的建立和操作方法数据库的建立和操作方法8.1 简单存储简单存储 n8.1.1 SharedPreferencesqSharedPreferencesSharedPreferences是一种轻量级的数据保存方式是一种轻量级的数据保存方式q通过通过SharedPreferencesSharedPreferences开发人员可以
2、将开发人员可以将NVPNVP(Name/Value PairName/Value Pair,名称,名称/值对值对)保存在)保存在AndroidAndroid的的文件系统中,而且文件系统中,而且SharedPreferencesSharedPreferences完全屏蔽了对文完全屏蔽了对文件系统的操作过程件系统的操作过程 q开发人员仅通过调用开发人员仅通过调用SharedPreferencesSharedPreferences中的函数中的函数就可就可以实现对以实现对NVPNVP的保存和读取的保存和读取 8.1 简单存储简单存储 n8.1.1 SharedPreferencesqSharedPre
3、ferencesSharedPreferences不仅能够保存数据,还能够实现不不仅能够保存数据,还能够实现不同应用程序间的数据共享同应用程序间的数据共享qSharedPreferencesSharedPreferences支持支持三种访问模式三种访问模式n私有私有(MODE_PRIVATEMODE_PRIVATE):仅创建):仅创建SharedPreferencesSharedPreferences的程的程序有权限对其进行读取或写入序有权限对其进行读取或写入n全局读全局读(MODE_WORLD_READABLEMODE_WORLD_READABLE):不仅创建程序可以对):不仅创建程序可以对
4、其进行读取或写入,其它应用程序也具有读取操作的权限,其进行读取或写入,其它应用程序也具有读取操作的权限,但没有写入操作的权限但没有写入操作的权限n全局写全局写(MODE_WORLD_WRITEABLEMODE_WORLD_WRITEABLE):所有程序都可以对其):所有程序都可以对其进行写入操作,但没有读取操作的权限进行写入操作,但没有读取操作的权限8.1 简单存储简单存储 n8.1.1 SharedPreferencesq在使用在使用SharedPreferencesSharedPreferences前,先定义前,先定义SharedPreferencesSharedPreferences的访
5、问模式的访问模式q下面的代码将访问模式定义为下面的代码将访问模式定义为私有模式私有模式 1 public static int MODE=MODE_PRIVATE;q有的时候需要将有的时候需要将SharedPreferencesSharedPreferences的访问模式设定为的访问模式设定为即可以全局读,也可以全局写,这就需要将即可以全局读,也可以全局写,这就需要将两种模式写两种模式写成下面的方式成下面的方式35 public static int MODE=Context.MODE_WORLD_READABLE+Context.MODE_WORLD_WRITEABLE;8.1 简单存储简单
6、存储 n8.1.1 SharedPreferencesq除了定义除了定义SharedPreferencesSharedPreferences的访问模式,还要定义的访问模式,还要定义SharedPreferencesSharedPreferences的名称,这个名称也是的名称,这个名称也是SharedPreferencesSharedPreferences在在AndroidAndroid文件系统中保存的文件名称文件系统中保存的文件名称q一般将一般将SharedPreferencesSharedPreferences名称声明为名称声明为字符串常量字符串常量,这样,这样可以在代码中多次使用可以在代码
7、中多次使用 1 public static final String PREFERENCE_NAME=SaveSetting;q使用使用SharedPreferencesSharedPreferences时需要将访问模式和时需要将访问模式和SharedPreferencesSharedPreferences名称作为参数传递到名称作为参数传递到getSharedPreferencesgetSharedPreferences()()函数,则可获取到函数,则可获取到SharedPreferencesSharedPreferences实例实例1 SharedPreferences sharedPref
8、erences=getSharedPreferences(PREFERENCE_NAME,MODE);8.1 简单存储简单存储 n8.1.1 SharedPreferencesq在获取到在获取到SharedPreferencesSharedPreferences实例后,可以通过实例后,可以通过SharedPreferences.EditorSharedPreferences.Editor类类对对SharedPreferencesSharedPreferences进进行修改,最后调用行修改,最后调用commit()commit()函数函数保存修改内容保存修改内容qSharedPreference
9、sSharedPreferences广泛支持各种基本数据类型,包括广泛支持各种基本数据类型,包括整型、布尔型、浮点型和长型等整型、布尔型、浮点型和长型等1 SharedPreferences.Editor editor=sharedPreferences.edit();2 editor.putString(Name,Tom);3 editor.putInt(Age,20);4 editor.putFloat(Height,1.81f);5 mit();8.1 简单存储简单存储 n8.1.1 SharedPreferencesq如果需要从已经保存的如果需要从已经保存的SharedPreferen
10、cesSharedPreferences中读取数据,中读取数据,同样是调用同样是调用getSharedPreferences()getSharedPreferences()函数,并在函数第函数,并在函数第1 1个参数中指明需要访问的个参数中指明需要访问的SharedPreferencesSharedPreferences名称,最名称,最后通过后通过get()get()函数函数获取保存在获取保存在SharedPreferencesSharedPreferences中的中的NVPNVPqget()函数的第函数的第1个参数是个参数是NVP的名称的名称q第第2个参数是在无法获取到数值的时候使用的缺省值
11、个参数是在无法获取到数值的时候使用的缺省值1 SharedPreferences sharedPreferences=getSharedPreferences(PREFERENCE_NAME,MODE);2 String name=sharedPreferences.getString(Name,Default Name);3 int age=sharedPreferences.getInt(Age,20);4 float height=sharedPreferences.getFloat(Height,1.81f);8.1 简单存储简单存储 n8.1.2 示例示例q下面将通过下面将通过Sim
12、plePreferenceDemoSimplePreferenceDemo示例介绍示例介绍SharedPreferencesSharedPreferences的文件保存位置和保存格式的文件保存位置和保存格式q下图是下图是SimplePreferenceDemoSimplePreferenceDemo示例的用户界面示例的用户界面8.1 简单存储简单存储n8.1.2 示例示例q用户在界面上的输入信息,在用户在界面上的输入信息,在ActivityActivity关闭时通过关闭时通过SharedPreferencesSharedPreferences进行保存。当应用程序重新开启时,进行保存。当应用程序
13、重新开启时,再通过再通过SharedPreferencesSharedPreferences将信息读取出来,并重新呈将信息读取出来,并重新呈现在用户界面上现在用户界面上 qSimplePreferenceDemoSimplePreferenceDemo示例运行并通过示例运行并通过“回退键回退键”退出退出后,通过后,通过FileExplorerFileExplorer查看查看/data/data/data/data下的数据,下的数据,AndroidAndroid系统为每个应用程序建立了与包同名的目录,系统为每个应用程序建立了与包同名的目录,用来保存应用程序产生的数据文件,包括普通文件、用来保存应
14、用程序产生的数据文件,包括普通文件、SharedPreferencesSharedPreferences文件和数据库文件等文件和数据库文件等 qSharedPreferencesSharedPreferences产生的文件就保存在产生的文件就保存在/data/data/shared_prefs/data/data/shared_prefs目录下目录下 8.1 简单存储简单存储n8.1.2 示例示例q在本示例中,在本示例中,shared_prefsshared_prefs目录中生成了一个名为目录中生成了一个名为SaveSetting.xmlSaveSetting.xml的文件的文件q如图如图8.
15、28.2所示,保存在所示,保存在shared_prefsshared_prefs目录下目录下q这个文件就是保存这个文件就是保存SharedPreferencesSharedPreferences的文件,文件大的文件,文件大小为小为170170字节字节,在,在LinuxLinux下的权限为下的权限为“-rw-rw-rw-rw-rw-rw”8.1 简单存储简单存储n8.1.2 示例示例q在在LinuxLinux系统中,文件权限分别描述了创建者、同组用系统中,文件权限分别描述了创建者、同组用户和其它用户对文件的操作限制。户和其它用户对文件的操作限制。x x表示可执行,表示可执行,r r表示表示可读,
16、可读,w w表示可写,表示可写,d d表示目录,表示目录,-表示普通文件表示普通文件q因此,因此,“-rw-rw-rw-rw-rw-rw”表示表示SaveSetting.xmlSaveSetting.xml可以被创建可以被创建者、同组用户和其它用户进行读取和写入操作,但不可者、同组用户和其它用户进行读取和写入操作,但不可执行执行 q产生这样的文件权限与程序人员设定的产生这样的文件权限与程序人员设定的SharedPreferencesSharedPreferences的访问模式有关,的访问模式有关,“-rw-rw-rw-rw-rw-rw”的的权限是权限是“全局读全局读+全局写全局写”的结果的结果
17、q如果将如果将SharedPreferencesSharedPreferences的访问模式设置为私有,则的访问模式设置为私有,则文件权限将成为文件权限将成为“-rw-rw-rw-rw-”,表示仅有创建者和同,表示仅有创建者和同组用户具有读写文件的权限组用户具有读写文件的权限8.1 简单存储简单存储n8.1.2 示例示例qSaveSetting.xml文件是以文件是以XML格式保存的信息,内容格式保存的信息,内容如下如下1 2 3 4 Tom5 6 8.1 简单存储简单存储n8.1.2 示例示例qSimplePreferenceDemoSimplePreferenceDemo示例在示例在onS
18、tart()onStart()函数中调用函数中调用loadSharedPreferencesloadSharedPreferences()()函数函数,读取保存在,读取保存在SharedPreferencesSharedPreferences中的姓名、年中的姓名、年龄和身高信息,并显示在用户界面上龄和身高信息,并显示在用户界面上q当当ActivityActivity关闭时,在关闭时,在onStop()onStop()函数函数调用调用saveSharedPreferencessaveSharedPreferences()(),保存界面上的信息,保存界面上的信息qSimplePreferenceD
19、emoActivity.javaSimplePreferenceDemoActivity.java的完整代码如下的完整代码如下1 package edu.hrbeu.SimplePreferenceDemo;23 import android.app.Activity;4 import android.content.Context;5 import android.content.SharedPreferences;6 import android.os.Bundle;8.1 简单存储简单存储n8.1.2 示例示例7 import android.widget.EditText;89 pub
20、lic class SimplePreferenceDemoActivity extends Activity 1011 private EditText nameText;12 private EditText ageText;13 private EditText heightText;14 public static final String PREFERENCE_NAME=SaveSetting;15 public static int MODE=Context.MODE_WORLD_READABLE+Context.MODE_WORLD_WRITEABLE;1617 Override
21、18 public void onCreate(Bundle savedInstanceState)19 super.onCreate(savedInstanceState);20 setContentView(R.layout.main);21 nameText=(EditText)findViewById(R.id.name);8.1 简单存储简单存储n8.1.2 示例示例22 ageText=(EditText)findViewById(R.id.age);23 heightText=(EditText)findViewById(R.id.height);24 2526 Override
22、27 public void onStart()28 super.onStart();29 loadSharedPreferences();30 31 Override32 public void onStop()33 super.onStop();34 saveSharedPreferences();35 368.1 简单存储简单存储n8.1.2 示例示例37 private void loadSharedPreferences()38 SharedPreferences sharedPreferences=getSharedPreferences(PREFERENCE_NAME,MODE)
23、;39 String name=sharedPreferences.getString(Name,Tom);40 int age=sharedPreferences.getInt(Age,20);41 float height=sharedPreferences.getFloat(Height,1.81f);4243 nameText.setText(name);44 ageText.setText(String.valueOf(age);45 heightText.setText(String.valueOf(height);46 4748 private void saveSharedPr
24、eferences()49 SharedPreferences sharedPreferences=getSharedPreferences(PREFERENCE_NAME,MODE);50 SharedPreferences.Editor editor=sharedPreferences.edit();8.1 简单存储简单存储n8.1.2 示例示例5152 editor.putString(Name,nameText.getText().toString();53 editor.putInt(Age,Integer.parseInt(ageText.getText().toString();
25、54 editor.putFloat(Height,Float.parseFloat(heightText.getText().toString();55 mit();56 57 n首先下载附件adb_win.zip,解压获得文件。将所有文件复制粘贴到电脑C盘/Windows/system32里面。n在命令符终端输入 adb shell,即可连接。n连接成功以后,你输入任何shell脚本命令都将是在手机系统中执行。调试中遇到问题:使用调试中遇到问题:使用cmd-adb shell时,显示错误为时,显示错误为adb不是内部命令或外部命令,也不是可运行的程序或批处理文不是内部命令或外部命令,也不是
26、可运行的程序或批处理文件。件。解决步骤:解决步骤:打开打开xml文件步骤:文件步骤:步骤步骤1:输入输入cd /data/data/com.example.simplepreferencedemo打开打开xml文件步骤:文件步骤:步骤步骤2:输入输入 ls打开打开xml文件步骤:文件步骤:步骤步骤3:输入输入 cd shared_prefs打开打开xml文件步骤:文件步骤:步骤步骤4:输入输入 cat SaveSetting.xml8.2 文件存储文件存储n虽然虽然SharedPreferencesSharedPreferences能够为开发人员简化数据存储和能够为开发人员简化数据存储和访问过
27、程,但直接使用文件系统保存数据仍然是访问过程,但直接使用文件系统保存数据仍然是AndroidAndroid数据存储中不可或缺的组成部分数据存储中不可或缺的组成部分nAndroidAndroid使用使用LinuxLinux的文件系统,开发人员可以建立和访问的文件系统,开发人员可以建立和访问程序自身建立的私有文件,也可以访问保存在资源目录中程序自身建立的私有文件,也可以访问保存在资源目录中的原始文件和的原始文件和XMLXML文件,还可以将文件保存在文件,还可以将文件保存在TFTF卡等外部卡等外部存储设备中存储设备中8.2 文件存储文件存储n8.2.1 内部存储内部存储q AndroidAndroi
28、d系统允许应用程序创建仅能够自身访问的私有系统允许应用程序创建仅能够自身访问的私有文件,文件保存在设备的内部存储器上,在文件,文件保存在设备的内部存储器上,在AndroidAndroid系系统下的统下的/data/data/files/data/data/files目录中目录中qAndroidAndroid系统不仅支持标准系统不仅支持标准JavaJava的的IOIO类和方法,还提供类和方法,还提供了能够简化读写流式文件过程的函数了能够简化读写流式文件过程的函数q这里主要介绍两个函数这里主要介绍两个函数nopenFileOutput()nopenFileInput()8.2 文件存储文件存储n8
29、.2.1 内部存储内部存储qopenFileOutput()函数函数nopenFileOutput()openFileOutput()函数为写入数据做准备而打开文件函数为写入数据做准备而打开文件n如果指定的文件存在,直接打开文件准备写入数据如果指定的文件存在,直接打开文件准备写入数据n如果指定的文件不存在,则创建一个新的文件如果指定的文件不存在,则创建一个新的文件nopenFileOutput()openFileOutput()函数的语法格式如下函数的语法格式如下public FileOutputStream openFileOutput(String name,int mode)q第第1 1
30、个参数是文件名称,这个参数不可以包含描述路径的斜个参数是文件名称,这个参数不可以包含描述路径的斜杠杠q第第2 2个参数是操作模式,个参数是操作模式,AndroidAndroid系统支持四种文件操作模式系统支持四种文件操作模式 n函数的返回值是函数的返回值是FileOutputStreamFileOutputStream类型类型8.2 文件存储文件存储n8.2.1 内部存储内部存储qopenFileOutput()函数函数n四种文件操作模式四种文件操作模式模式 说明 MODE_PRIVATE MODE_PRIVATE 私有模式,缺陷模式,文件仅能够被私有模式,缺陷模式,文件仅能够被创建文件的程序
31、访问,或具有相同创建文件的程序访问,或具有相同UIDUID的程序访问。的程序访问。MODE_APPEND MODE_APPEND 追加模式,如果文件已经存在,则在追加模式,如果文件已经存在,则在文件的结尾处添加新数据。文件的结尾处添加新数据。MODE_WORLD_READABLE MODE_WORLD_READABLE 全局读模式,允许任何程序读取私有全局读模式,允许任何程序读取私有文件。文件。MODE_WORLD_WRITEABLE MODE_WORLD_WRITEABLE 全局写模式,允许任何程序写入私有全局写模式,允许任何程序写入私有文件。文件。8.2 文件存储文件存储n8.2.1 内部
32、存储内部存储qopenFileOutput()函数函数n使用使用openFileOutput()函数建立新文件的示例代码如下函数建立新文件的示例代码如下1 String FILE_NAME=fileDemo.txt;2 FileOutputStream fos=openFileOutput(FILE_NAME,Context.MODE_PRIVATE)3 String text=“Some data”;4 fos.write(text.getBytes();5 fos.flush();6 fos.close();q代码首先定义文件的名称为代码首先定义文件的名称为fileDemo.txtfile
33、Demo.txtq然后使用然后使用openFileOutput()openFileOutput()函数以私有模式建立文件,并调函数以私有模式建立文件,并调用用write()write()函数函数将数据写入文件,调用将数据写入文件,调用flush()flush()函数函数将缓冲中将缓冲中的数据写入文件,最后调用的数据写入文件,最后调用close()close()函数函数关闭关闭FileOutputStreamFileOutputStream8.2 文件存储文件存储n8.2.1 内部存储内部存储qopenFileOutput()函数函数n为了提高文件系统的性能,一般调用为了提高文件系统的性能,一般
34、调用write()write()函数时,如函数时,如果写入的数据量较小,系统会把数据保存在数据缓冲区中,果写入的数据量较小,系统会把数据保存在数据缓冲区中,等数据量积攒到一定程度时再将数据一次性写入文件等数据量积攒到一定程度时再将数据一次性写入文件n因此,在调用因此,在调用close()close()函数关闭文件前,务必要函数关闭文件前,务必要调用调用flushflush()()函数函数,将缓冲区内所有的数据写入文件,将缓冲区内所有的数据写入文件n如果开发人员在调用如果开发人员在调用close()close()函数前没有调用函数前没有调用flush()flush(),则,则可能导致部分数据丢失
35、可能导致部分数据丢失8.2 文件存储文件存储n8.2.1 内部存储内部存储qopenFileInput()函数函数nopenFileInput()函数为读取数据做准备而打开文件函数为读取数据做准备而打开文件nopenFileInput()函数的语法格式如下函数的语法格式如下public FileInputStream openFileInput(String name)q第第1个参数也是文件名称,同样不允许包含描述路径的斜杠个参数也是文件名称,同样不允许包含描述路径的斜杠q使用使用openFileInput()openFileInput()函数打开已有文件,并以二进制方式函数打开已有文件,并以
36、二进制方式读取数据的示例代码如下读取数据的示例代码如下1 String FILE_NAME=fileDemo.txt;2 FileInputStream fis=openFileInput(FILE_NAME);34 byte readBytes=new bytefis.available();5 while(fis.read(readBytes)!=-1)6 8.2 文件存储文件存储n8.2.1 内部存储内部存储qopenFileInput()函数函数n上面的两部分代码在实际使用过程中会遇到错误提示,因上面的两部分代码在实际使用过程中会遇到错误提示,因为文件操作可能会遇到各种问题而最终导致操
37、作失败,因为文件操作可能会遇到各种问题而最终导致操作失败,因此代码应该使用此代码应该使用try/catchtry/catch捕获捕获可能产生的异常可能产生的异常.8.2 文件存储文件存储n8.2.1 内部存储内部存储qFileTextFileText是用来演示在内部存储器上进行文件写入和读是用来演示在内部存储器上进行文件写入和读取的示例。取的示例。q用户界面如下图所示,用户将需要写入的数据添加在用户界面如下图所示,用户将需要写入的数据添加在EditTextEditText中,通过中,通过“写入文件写入文件”按钮将数据写入到按钮将数据写入到crazyit.txtcrazyit.txt文件中文件中
38、q通过通过“读取文件读取文件”按钮,程序会读取按钮,程序会读取crazyit.txtcrazyit.txt文件文件的内容,并显示在界面下方的白色区域中的内容,并显示在界面下方的白色区域中8.2 文件存储文件存储8.2 文件存储文件存储n8.2.1 内部存储内部存储qInternalFileDemo示例的核心代码示例的核心代码package org.crazyit.io;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.PrintStream;import android.app.Activ
39、ity;import android.os.Bundle;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;public class FileTest extends Activity final String FILE_NAME=crazyit.bin;8.2 文件存储文件存储n8.2.1 内部存储内部存储Overridepublic void onCreate(Bundle savedIns
40、tanceState)super.onCreate(savedInstanceState);setContentView(R.layout.main);System.out.println(new StringBuilder(a).append(b).append(c).toString();/获取两个按钮获取两个按钮Button read=(Button)findViewById(R.id.read);Button write=(Button)findViewById(R.id.write);/获取两个文本框获取两个文本框final EditText edit1=(EditText)find
41、ViewById(R.id.edit1);final EditText edit2=(EditText)findViewById(R.id.edit2);/为为write按钮绑定事件监听器按钮绑定事件监听器write.setOnClickListener(new OnClickListener()Overridepublic void onClick(View source)/将将edit1中的内容写入文件中中的内容写入文件中write(edit1.getText().toString();edit1.setText(););8.2 文件存储文件存储n8.2.1 内部存储内部存储read.se
42、tOnClickListener(new OnClickListener()Overridepublic void onClick(View v)/读取指定文件中的内容,并显示出来读取指定文件中的内容,并显示出来edit2.setText(read(););private String read()try /打开文件输入流打开文件输入流FileInputStream fis=openFileInput(FILE_NAME);byte buff=new byte1024;int hasRead=0;StringBuilder sb=new StringBuilder();/读取文件内容读取文件内
43、容while(hasRead=fis.read(buff)0)sb.append(new String(buff,0,hasRead);/关闭文件输入流关闭文件输入流fis.close();return sb.toString();8.2 文件存储文件存储n8.2.1 内部存储内部存储catch(Exception e)e.printStackTrace();return null;private void write(String content)try/以追以追加模式打开文件输出流加模式打开文件输出流FileOutputStream fos=openFileOutput(FILE_NAME
44、,MODE_APPEND);/将将FileOutputStream包装成包装成PrintStream PrintStream ps=new PrintStream(fos);/输出文件内容输出文件内容ps.println(content);/关闭文件输出流关闭文件输出流ps.close();catch(Exception e)e.printStackTrace();8.2 文件存储文件存储n8.2.1 内部存储内部存储q程序运行后,在目录下,找到了新建立的程序运行后,在目录下,找到了新建立的fileDemo.txtfileDemo.txt文件,下图所示文件,下图所示q从文件权限上进行分析从文件
45、权限上进行分析fileDemo.txtfileDemo.txt文件,文件,“-rw-rw-rw-rw-”表明文件仅允许文件创建者和同组用户读写,其它用表明文件仅允许文件创建者和同组用户读写,其它用户无权使用户无权使用q文件的大小为文件的大小为9 9个字节,保存的数据为个字节,保存的数据为“Some dataSome data”8.2 文件存储文件存储n8.2.2 外部存储外部存储qAndroid的外部存储设备一般指的外部存储设备一般指Micro SD卡,又称卡,又称T-Flash,是一种广泛使用于数码设备的超小型记,是一种广泛使用于数码设备的超小型记忆卡忆卡q下图是东芝出品的下图是东芝出品的3
46、2G Micro SD卡卡 8.2 文件存储文件存储n8.2.2 外部存储外部存储qMicro SDMicro SD卡适用于保存大尺寸的文件或者是一些无需设卡适用于保存大尺寸的文件或者是一些无需设置访问权限的文件置访问权限的文件q如果用户希望保存录制的视频文件和音频文件,因为如果用户希望保存录制的视频文件和音频文件,因为AndroidAndroid设备的内部存储空间有限,所以使用设备的内部存储空间有限,所以使用Micro SDMicro SD卡则是非常适合的选择卡则是非常适合的选择q但如果需要设置文件的访问权限,则不能够使用但如果需要设置文件的访问权限,则不能够使用Micro Micro SD
47、SD卡,因为卡,因为Micro SDMicro SD卡使用卡使用FATFAT(File Allocation File Allocation TableTable)文件系统,不支持访问模式和权限控制)文件系统,不支持访问模式和权限控制qAndroidAndroid的内部存储器使用的是的内部存储器使用的是LinuxLinux文件系统,则可通文件系统,则可通过文件访问权限的控制保证文件的私密性过文件访问权限的控制保证文件的私密性8.2 文件存储文件存储n8.2.2 外部存储外部存储qAndroidAndroid模拟器支持模拟器支持SDSD卡的模拟,在模拟器建立时可以卡的模拟,在模拟器建立时可以选择
48、选择SDSD卡的容量,如下图所示,在模拟器启动时会自动卡的容量,如下图所示,在模拟器启动时会自动加载加载SDSD卡卡8.2 文件存储文件存储n8.2.2 外部存储外部存储q正确加载正确加载SDSD卡后,卡后,SDSD卡中的目录和文件被映射到卡中的目录和文件被映射到/mnt/sdcard/mnt/sdcard目录下目录下q因为用户可以加载或卸载因为用户可以加载或卸载SDSD卡,所以在编程访问卡,所以在编程访问SDSD卡前卡前首先需要检测首先需要检测/mnt/sdcard/mnt/sdcard目录是否可用目录是否可用q如果不可用,说明设备中的如果不可用,说明设备中的SDSD卡已经被卸载。如果可用,
49、卡已经被卸载。如果可用,则直接通过使用标准的类进行访问则直接通过使用标准的类进行访问qSDcardFileDemoSDcardFileDemo示例用来说明如何将数据保存在示例用来说明如何将数据保存在SDSD卡中卡中q首先通过首先通过“生产随机数列生产随机数列”按钮生产按钮生产1010个随机小数,然个随机小数,然后通过后通过“写入写入SDSD卡卡”按钮将生产的数据保存在按钮将生产的数据保存在SDSD卡的根卡的根目录下,也就是目录下,也就是AndroidAndroid系统的系统的/mnt/sdcard/mnt/sdcard目录下目录下 8.2 文件存储文件存储n8.2.2 外部存储外部存储qSDc
50、ardFileDemo用户界面图用户界面图8.2 文件存储文件存储n8.2.2 外部存储外部存储qSDcardFileDemoSDcardFileDemo示例运行后,在每次点击示例运行后,在每次点击“写入写入SDSD卡卡”按钮后,都按钮后,都会在会在SDSD卡中生产一个新文件,文件名各不相同,如下图所示卡中生产一个新文件,文件名各不相同,如下图所示8.2 文件存储文件存储n8.2.2 外部存储外部存储qSDcardFileDemoSDcardFileDemo示例与示例与InternalFileDemoInternalFileDemo示例的核心代示例的核心代码比较相似,不同之处在于代码中添加了码