Android中保存数据到sd卡

目标:
模拟一个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;

    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值