您的位置:首页 > 移动开发 > Android开发

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中的两个方法进行操作。

两个主要方法的逻辑代码如下:

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;

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据存储 io流