第六章 数据存储全方案,详解持久化技术 主讲:王海
第六章 数据存储全方案--详解持久化技术 主讲:王海
本章目标 了解Android数据存储方式 能够使用/○流操作文件 能够读写SD卡文件 能够使用SharedPreferences存储 能够熟练使用SQLite进行数据的增删改查 Android软件开发 主讲:王海
Android软件开发 主讲:王海 本章目标 • 了解Android数据存储方式 • 能够使用I/O流操作文件 • 能够读写SD卡文件 • 能够使用SharedPreferences存储 • 能够熟练使用SQLite进行数据的增删改查
数据存储 Android提供了以下三种数据存储方式: √文件存储:少量数据需要保存,且数据格式无需结构化 √SharedPreferences存储:数据是以"key-value”键值对的方式 进行组织和管理,并保存到XML文件中 √SQLite数据库存储:用于数据量较多,且需要进行结构化存储 Android软件开发 主讲:王海
Android软件开发 主讲:王海 数据存储 • Android提供了以下 三种数据存储方式: 文件存储:少量数据需要保存,且数据格式无需结构化 SharedPreferences存储:数据是以“key-value”键值对的方式 进行组织和管理,并保存到XML文件中 SQLite数据库存储:用于数据量较多,且需要进行结构化存储
I/O流操作文件 通过Contextx对象提供的openFileInput(0和openFileOuput()两个方法分别来获 得文件的输入流和输出流: √FileInputStream openFileInput((String name):用于获取应用程序的数据 文件夹下指定"name”文件名的标准文件输入流,以便读取设备中的文件 √FileOutputStream openFileOuput(String name,int mode):用于s获取应 用程序的数据文件夹下指定“name”文件名的标准文件输出流,以便将数 据写入设备的文件中 Android软件开发 主讲:王海
Android软件开发 主讲:王海 I/O流操作文件 • 通过Context对象提供的openFileInput()和openFileOuput()两个方法分别来获 得文件的输入流和输出流: FileInputStream openFileInput(String name):用于获取应用程序的数据 文件夹下指定“name”文件名的标准文件输入流,以便读取设备中的文件 FileOutputStream openFileOuput(String name,int mode):用于获取应 用程序的数据文件夹下指定“name”文件名的标准文件输出流,以便将数 据写入设备的文件中
/O流操作文件 Context类中提供4个静态常量用于表示不同的输出模式 模式 功能描述 Context.MODE PRIVATE 私有模式所创建的文件都是私有文件,只能被应用本身所访问 Context.MODE_APPEND 附加模式首先会检查文件是否存在,若文件不存在,则创建新文件;若文 件存在,则在原文件的末尾追加内容 Context.MODE_WORLD_READABLE 可读模式,该模式的文件可以被其他应用程序读取 Context.MODE_WORLD_WRITABLE 可写模式,该模式的文件可以被其他应用程序读写 从Android4.2开始,不推荐使用Context.MODE_NORLD_WRITABLEi可读模式和 Context.MODE_WORLD_READABLE可写模式,由于这两种模式允许其他应用程序操作本应用程 注意 序所创建的文件数据,很容易会引起安全漏洞,因此在高版本的Android系统中尽量不要采用这两 种模式。 Android软件开发 主讲:王海
Android软件开发 主讲:王海 I/O流操作文件 • Context类中提供4个静态常量用于表示不同的输出模式 模式 功能描述 Context.MODE_PRIVATE 私有模式所创建的文件都是私有文件,只能被应用本身所访问 Context.MODE_APPEND 附加模式首先会检查文件是否存在,若文件不存在,则创建新文件;若文 件存在,则在原文件的末尾追加内容 Context.MODE_WORLD_READABLE 可读模式,该模式的文件可以被其他应用程序读取 Context.MODE_WORLD_WRITABLE 可写模式,该模式的文件可以被其他应用程序读写 从Android 4.2开始,不推荐使用Context.MODE_WORLD_WRITABLE可读模式和 Context.MODE_WORLD_READABLE可写模式,由于这两种模式允许其他应用程序操作本应用程 序所创建的文件数据,很容易会引起安全漏洞,因此在高版本的Android系统中尽量不要采用这两 种模式
/O流操作文件 ·Context.上下文对象还提供了一些方法来访问应用程序的数据文件夹 方法 功能描述 File getDir(String name,int mode) 在应用程序的数据文件夹下获取或创建name对应的子目录 File getFilesDir() 获取应用程序的数据文件夹的绝对路径 String[]fileList() 返回应用程序的数据文件夹下的所有文件 boolean deleteFile(String name) 删除应用程序的数据文件夹下的指定文件 Android软件开发 主讲:王海
Android软件开发 主讲:王海 I/O流操作文件 方法 功能描述 File getDir(String name,int mode) 在应用程序的数据文件夹下获取或创建name对应的子目录 File getFilesDir() 获取应用程序的数据文件夹的绝对路径 String[] fileList() 返回应用程序的数据文件夹下的所有文件 boolean deleteFile(String name) 删除应用程序的数据文件夹下的指定文件 • Context上下文对象还提供了一些方法来访问应用程序的数据文件夹
/O流操作文件 获取文件输入流进行读取文件 /定义文件名 String file ="qst.txt"; /获取指定文件的文件输入流 FileInputStream fileInputStream openFileInput(file); /定义一个字节缓存数组 byte[]buffer=new byte[fileInputStream.available(]; /将数据读到缓存区 fileInputStream.read(buffer); /川关闭文件输入流 fileInputStream.close(); 。 获取文件输出流进行写文件 /获取文件输出流,操作模式是私有 FileOutputStream fileOutputStream openFileOutput(file,Context.MODE_PRIVATE); String strContent="QST青软实训": /将内容写入文件 fileOutputStream.write(strContent.getBytes()); fileOutputStream.close(); Android软件开发 主讲:王海
Android软件开发 主讲:王海 I/O流操作文件 • 获取文件输入流进行读取文件 //定义文件名 String file = "qst.txt"; //获取指定文件的文件输入流 FileInputStream fileInputStream = openFileInput(file); //定义一个字节缓存数组 byte[] buffer=new byte[fileInputStream.available()]; //将数据读到缓存区 fileInputStream.read(buffer); //关闭文件输入流 fileInputStream.close(); • 获取文件输出流进行写文件 //获取文件输出流,操作模式是私有 FileOutputStream fileOutputStream = openFileOutput(file,Context.MODE_PRIVATE); String strContent = "QST青软实训"; //将内容写入文件 fileOutputStream.write(strContent.getBytes()); fileOutputStream.close();
读写SD卡步骤 使用Environment..getExternalStorageState()方法判断是否插入SD卡,且应 用程序具有读写SD卡的权限 ② 使用Environment.getExternalStorageDirectory()方法获取SD卡的目录 ③使用文件输入流(FileInputStream、FileReader)或输出流 (FileOutputStream、FileWriter)来读写SD卡中的文件 SD卡(Secure Digital Memory Card)是一种基于半导体快闪记忆器的多功能存 储卡,具有大容量、高性能、安全高等多种特点,被广泛地用于便携式移动设 注意 备,例如手机、数码相机、PDA等。SD卡极大地扩充了手机的存储能力。 Android软件开发 主讲:王海
Android软件开发 主讲:王海 读写SD卡步骤 ① 使用Environment.getExternalStorageState()方法判断是否插入SD卡,且应 用程序具有读写SD卡的权限 ② 使用Environment.getExternalStorageDirectory()方法获取SD卡的目录 ③ 使用文件输入流(FileInputStream、FileReader)或输出流 (FileOutputStream、FileWriter)来读写SD卡中的文件 SD卡(Secure Digital Memory Card)是一种基于半导体快闪记忆器的多功能存 储卡,具有大容量、高性能、安全高等多种特点,被广泛地用于便携式移动设 备,例如手机、数码相机、PDA等。SD卡极大地扩充了手机的存储能力
读SD卡上的文件 //1、如果手机插入了sD卡,而且应用程序具有访问$D的权限 if (Environment.getExternalStoragestate().equals(Environment.MEDIA MOUNTED)){ //2、获取SD卡对应的存储目录 File sdCardDir Environment.getExternalStorageDirectory(); Log.d("FileIO",""+sdcardDir); //3、获取指定文件对应的输入流 FileInputStream fis new FileInputStream(sdCardDir.getCanonicalPath() +FILE NAME); .··...//读文件 ·Android应用程序读写SD卡中的文件时,需要注意以下两点: √确保已插入SD卡 √在AndroidManifest..xml程序清单文件中配置SD卡的读写权限 Android软件开发 主讲:王海
Android软件开发 主讲:王海 读SD卡上的文件 // 1、如果手机插入了SD卡,而且应用程序具有访问SD的权限 if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){ // 2、获取SD卡对应的存储目录 File sdCardDir = Environment.getExternalStorageDirectory(); Log.d("FileIO",""+ sdCardDir); //3、 获取指定文件对应的输入流 FileInputStream fis = new FileInputStream(sdCardDir.getCanonicalPath() + FILE_NAME); ......//读文件 } • Android应用程序读写SD卡中的文件时,需要注意以下两点: 确保已插入SD卡 在AndroidManifest.xml程序清单文件中配置SD卡的读写权限
配置SD卡的读写权限 除了使用Environment.getExternalStorageDirectory()方法来获取SD卡的路径 外,还可以直接判断SD卡所对应的路径是否存在,这样也可以知道手机是 注意 否插入了SD卡 Android软件开发 主讲:王海
Android软件开发 主讲:王海 配置SD卡的读写权限 除了使用Environment.getExternalStorageDirectory()方法来获取SD卡的路径 外,还可以直接判断SD卡所对应的路径是否存在,这样也可以知道手机是 否插入了SD卡