Android本地存取数据的操作、偏好设置
2019-02-22 本文已影响0人
biyu6
1.手机自身内存数据的存取操作:
//封装的保存和读取方法
public class UserInfoUtils {
//保存用户名和密码的方法
public static boolean saveInfo(Context context,String userName,String pwd) {
try {//尝试保存信息
//将用户名和密码拼接成一个字符串
String result = userName + "##" + pwd;
// //指定存放的本地文件路径
// String path = context.getFilesDir().getPath();//会在data/data/应用的包内生成一个file文件夹
// File file = new File(path,"info.txt");
// //创建文件输出流
// FileOutputStream fos = new FileOutputStream(file);
//
/**通过上下文获取文件的输出流FileOutputStream
* name: 文件的名字
* mode: 文件的模式:0私有的MODE_PRIVATE、可追加MODE_APPEND、可读MODE_WORLD_READABLE、可写MODE_WORLD_WRITEABLE
* */
FileOutputStream fos = context.openFileOutput("infoo.txt", 0);
//将内容写下来
fos.write(result.getBytes());
//关闭文件流
fos.close();
return true;
} catch (Exception e) {//保存信息异常
System.out.println("用户名密码保存失败!");
return false;
}
}
//读取用户的信息
public static Map<String, String> readInfo(Context context) {
try {//尝试读取信息
//定义map
Map<String, String> maps = new HashMap<String, String>();
//指定读取的本地文件路径
// File file = new File("data/data/com.biyu6.login/info.txt");
// String path = context.getFilesDir().getPath();
// File file = new File(path,"info.txt");
// //创建文件读取流
// FileInputStream fis = new FileInputStream(file);
//
//通过上下文获取文件读取流
FileInputStream fis = context.openFileInput("infoo.txt");
//将内容读取出来
BufferedReader buf = new BufferedReader(new InputStreamReader(fis));
String contentStr = buf.readLine();//读取数据
//将字符串切割出来
String[] splits = contentStr.split("##");
String name = splits[0];
String pwd = splits[1];
//把name和pwd放入map中
maps.put("name", name);
maps.put("pwd", pwd);
//关闭文件流
fis.close();
return maps;
} catch (Exception e) {//读取信息异常
System.out.println("用户名密码读取失败!");
return null;
}
}
}
//方法的引用:
//将用户名和密码保存到本地
Boolean result = UserInfoUtils.saveInfo(MainActivity.this,nameStr, passwordStr);
if (result) {
Toast.makeText(MainActivity.this, "用户名密码保存成功!", 1).show();
}else {
Toast.makeText(MainActivity.this, "用户名密码保存失败!", 1).show();
}
//读取data/data 下存储的用户名和密码信息
Map<String, String> maps = UserInfoUtils.readInfo(MainActivity.this);
if (maps!=null) {//如果不为空
//把name和pwd拿出来
String name = maps.get("name");
String pwd = maps.get("pwd");
//赋值给控件
et_name.setText(name);
et_password.setText(pwd);
}
2.手机SD卡数据的存取操作:
注意:往sd卡中写数据需要配置权限
android.permission.WRITE_EXTERNAL_STORAGE
//封装的保存和读取方法
public class UserInfoUtils {
//保存用户名和密码的方法
public static boolean saveInfo(String userName,String pwd) {
try {//尝试保存信息
//将用户名和密码拼接成一个字符串
String result = userName + "##" + pwd;
//指定一个固定的写入路径
// File file = new File("/mnt/sdcard/info.txt");
//获取sdcard的路径
String sdPath = Environment.getExternalStorageDirectory().getPath();
File file = new File(sdPath,"haha.txt");
//创建文件输出流
FileOutputStream fos = new FileOutputStream(file);
//将内容写下来
fos.write(result.getBytes());
//关闭文件流
fos.close();
return true;
} catch (Exception e) {//保存信息异常
System.out.println("用户名密码保存失败!");
return false;
}
}
//读取用户的信息
public static Map<String, String> readInfo() {
try {//尝试读取信息
//定义map
Map<String, String> maps = new HashMap<String, String>();
//指定一个固定的读取路径
// File file = new File("/mnt/sdcard/info.txt");
//获取sdcard的路径
String sdPath = Environment.getExternalStorageDirectory().getPath();
File file = new File(sdPath,"haha.txt");
//创建文件读取流
FileInputStream fis = new FileInputStream(file);
//将内容读取出来
BufferedReader buf = new BufferedReader(new InputStreamReader(fis));
String contentStr = buf.readLine();//读取数据
//将字符串切割出来
String[] splits = contentStr.split("##");
String name = splits[0];
String pwd = splits[1];
//把name和pwd放入map中
maps.put("name", name);
maps.put("pwd", pwd);
//关闭文件流
fis.close();
return maps;
} catch (Exception e) {//读取信息异常
System.out.println("用户名密码读取失败!");
return null;
}
}
}
//方法的引用:
//把数据保存到sd卡,需要先判断sd卡是否可用
if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
Toast.makeText(getApplicationContext(), "sd卡可用", 1).show();
//[2.4]将用户名和密码保存到本地
Boolean result = UserInfoUtils.saveInfo(nameStr, passwordStr);
if (result) {
Toast.makeText(MainActivity.this, "用户名密码保存成功!", 1).show();
}else {
Toast.makeText(MainActivity.this, "用户名密码保存失败!", 1).show();
}
}else {
Toast.makeText(getApplicationContext(), "sd卡不可用", 1).show();
}
//读取sd卡中存储的用户名和密码信息
Map<String, String> maps = UserInfoUtils.readInfo();
if (maps!=null) {//如果不为空
//把name和pwd拿出来
String name = maps.get("name");
String pwd = maps.get("pwd");
//赋值给控件
et_name.setText(name);
et_password.setText(pwd);
}
扩展:获取SD卡的空间大小(总大小、可用大小)
//获取两个控件(总空间、可用空间)
TextView tv_totalSize = (TextView) findViewById(R.id.textView1);
TextView tv_userableSize = (TextView) findViewById(R.id.textView2);
//获取sd卡的 总空间和可用空间
File file = Environment.getExternalStorageDirectory();
long totalSpace = file.getTotalSpace(); //总空间:字节
long usableSpace = file.getUsableSpace(); //可用空间:字节
//空间大小转换为MB
String totalStr = Formatter.formatFileSize(this, totalSpace);
String usableString = Formatter.formatFileSize(this, usableSpace);
//给控件赋值
tv_totalSize.setText("SD卡的总空间为:"+ totalStr);
tv_userableSize.setText("SD卡的可用空间为:"+ usableString);
3偏好设置
安卓里面的偏好设置为:SharedPreferences
/**将用户名和密码保存到偏好设置中(SharedPreferences)
name 会生成一个xml文件
ode 四种模式(0私有、可读、可写...)
*/
SharedPreferences sp = getSharedPreferences("config", 0);
//获取偏好设置的编辑器
SharedPreferences.Editor edit = sp.edit();
//存数据:int long bool string
edit.putString("name", nameStr);
edit.putString("pwd", passwordStr);
//点击提交编辑器
edit.commit();
//根据key找值,找不到返回一个默认值
String name = sp.getString("name", "");
String pwd = sp.getString("pwd", "");
//赋值给控件
et_name.setText(name);
et_password.setText(pwd);