Android中保存数据到sd卡
2015-08-03 14:55
369 查看
目标:
模拟一个QQ登陆界面,当CheckBox勾选时,将第一次输入的QQ号和密码存至SD卡,下次打开app可自动显示。
关键步骤:
1. 添加一个UtilsSD业务类,用于处理数据的存储和获取,方法分别为saveUserInfo()和getUserInfo()。
数据存储的逻辑:
(1)判断SD卡是否挂载,若没有挂载则返回false。
(2)若挂载,初始化SD卡的文件存储路径,并根据路径和命名来建立SD卡文件file。
(3)创建file的输出流对象fos,将传入的number和password字符数据通过getBytes()方法转换为字节数组,并用fos的write()方法写入流。
数据获取的逻辑:
(1)判断SD卡是否挂载,若没有挂载则返回false。
(2)若挂载,初始化SD卡的文件存储路径,并根据路径和命名来建立SD卡文件file。
(3)创建缓冲流读入对象br,对file的输入流进行读入。
(4)使用br的readline()方法获取到字符串text。
(5)如果text不为空,使用split方法解析字符串,获得每个字段对应的value。最终返回键值对的Map集合。
打开的I/O流的对象,如BufferedReader, OutputStream等一定要及时关闭!
对SD卡操作要在AndroidManifest.xml文件中添加读写权限!
2. 在主界面的Activity里面调用UtilsSD中的两个方法进行操作。
两个主要方法的逻辑代码如下:
模拟一个QQ登陆界面,当CheckBox勾选时,将第一次输入的QQ号和密码存至SD卡,下次打开app可自动显示。
关键步骤:
1. 添加一个UtilsSD业务类,用于处理数据的存储和获取,方法分别为saveUserInfo()和getUserInfo()。
数据存储的逻辑:
(1)判断SD卡是否挂载,若没有挂载则返回false。
(2)若挂载,初始化SD卡的文件存储路径,并根据路径和命名来建立SD卡文件file。
(3)创建file的输出流对象fos,将传入的number和password字符数据通过getBytes()方法转换为字节数组,并用fos的write()方法写入流。
数据获取的逻辑:
(1)判断SD卡是否挂载,若没有挂载则返回false。
(2)若挂载,初始化SD卡的文件存储路径,并根据路径和命名来建立SD卡文件file。
(3)创建缓冲流读入对象br,对file的输入流进行读入。
(4)使用br的readline()方法获取到字符串text。
(5)如果text不为空,使用split方法解析字符串,获得每个字段对应的value。最终返回键值对的Map集合。
打开的I/O流的对象,如BufferedReader, OutputStream等一定要及时关闭!
对SD卡操作要在AndroidManifest.xml文件中添加读写权限!
2. 在主界面的Activity里面调用UtilsSD中的两个方法进行操作。
两个主要方法的逻辑代码如下:
import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.InputStreamReader; import java.util.HashMap; import java.util.Map; import android.content.Context; import android.os.Environment; import android.text.TextUtils; public class UtilsSD { /**存储数据 * * @param context * @param number * @param password * @return */ public static boolean saveUserInfo(Context context, String number, String password){ try { //调用Environment类中的getExternalStorageState()方法,获取SD卡状态对象 String state = Environment.getExternalStorageState(); //如果SD卡未处于挂载状态,return false if(!Environment.MEDIA_MOUNTED.equals(state)){ return false; } //获得SD卡的dir路径,该地址可以适配不同手机,也可根据包名的改变做出改变 File sdCardFile = Environment.getExternalStorageDirectory(); //创建路径为sdCardFile,名称为sb.txt的文件file File file = new File(sdCardFile, "sb.txt"); //创建输出流对象fos FileOutputStream fos = new FileOutputStream(file); //以##作为数据分隔符 String data = number+"##"+password; //写入流 fos.write(data.getBytes()); fos.flush(); fos.close(); return true; } catch (Exception e) { e.printStackTrace(); } return false; } /**获取键值对数据 * * @param context * @return */ public static Map<String, String> getUserInfo(Context context){ try { String state = Environment.getExternalStorageState(); if(!Environment.MEDIA_MOUNTED.equals(state)){ // return null; } File sdCardFile = Environment.getExternalStorageDirectory(); File file = new File(sdCardFile, "sb.txt"); BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(file))); String text = br.readLine(); br.close(); if(!TextUtils.isEmpty(text)){ Map<String, String> userInfoMap = new HashMap<String, String>(); String[] split = text.split("##"); userInfoMap.put("number", split[0]); userInfoMap.put("password", split[1]); return userInfoMap; } } catch (Exception e) { e.printStackTrace(); } return null; } }
相关文章推荐
- 一些关于数据存储和查询优化的想法
- 正确面对服务器数据存储防止数据丢失
- 高性能Javascript笔记 数据的存储与访问性能优化
- 在android开发中进行数据存储与访问的多种方式介绍
- Python使用shelve模块实现简单数据存储的方法
- android中使用SharedPreferences进行数据存储的操作方法
- java IO流文件的读写具体实例
- Android基础——数据存储
- Android实现数据存储5种技术
- Android数据的四种存储方式
- LUN 是个什么东西
- 编程狂人第三十一期
- 编程狂人第三十三期,程序员必读的技术周刊
- Android数据储存——SharedPreferences储存
- android中数据存储的ContentProvider的使用方法
- 装饰类设计模式 【不完善版】 IO流
- IO流操作规律 转码
- 重置标准输入输出流 IO流
- 【Java基础】IO流操作
- JAVA基础-IO流