Android的数据存储(一)——SharedPreferences和IO
一,使用SharedPreferences
有些时候,应用程序有少量的数据需要保存,而且这些数据的格式很简单,都是普通的字符串或基本数据类型等,比如说用户的偏好设置,记住密码等,对于这种数据,可以用SharedPreferences进行保存。
1,SharedPreferences的基本操作
//----------------------查找----------------------------------
//获取只能被本应用读、写的SharedPreference对象,默认寻找在
//该应用目录下/data/data/app.package.name/shared_prefs目录下的login.xml文件
SharedPreferences sp = getSharedPreferences("login", MODE_PRIVATE);
//在loing.xml中查找key是password的值。
String oldpass = sp.getString("password", "");
//----------------------保存----------------------------------
SharedPreferences sp = getSharedPreferences("login",
MODE_PRIVATE);
//获取SharedPreferences的编辑器
SharedPreferences.Editor ed = sp.edit();
ed.putString("password", etpass.getText().toString());
// 当Editor编辑完成后,提交修改。
ed.commit();
//----------------------删除----------------------------------
editor.clear(); //清空SharedPreference里的所有数据
editor.remove(String key) //删除SharedPreference里指定key的数据项 login.xml的内容:
2,如果想访问其他应用程序中的sharedpreferences.xml
1) 设置SharedPreference的权限:MODE_WORLD_READABLE 其他应用程序可读
2) 假设其中OtherApp中的包名:com.lydia.app ,获取该应用的Context对象
Context other = createPackageContext("com.lydia.sp",
Context.CONTEXT_IGNORE_SECURITY);
SharedPreferences sp = other.getSharedPreferences("otherXML",
Context.MODE_WORLD_READABLE);
String ss = sp.getString(key);二,File存储
1,openFileOutput和openFileInput
getDir(String name,int mode): 在应用程序的数据文件夹下获取或创建name对应的子目录
File getFilesDir():获取对应应用程序的数据文件夹的绝对路径。 /data/data/com.package/files
String[] fileList():返回该应用程序的数据文件夹下的全部文件。
deleteFile(String) 删除该应用程序的数据文件夹下的指定文件
//----------读--------------------------------------------
// 打开对应程序的数据文件夹下的文件
// /data/data/com.lydia.testfile/files/tarena.dat
InputStream is = openFileInput("tarena.dat");
byte[] buff = new byte[1024];
int b = -1;
StringBuffer sb = new StringBuffer("");
while ((b = is.read(buff)) != -1) {
sb.append(new String(buff, 0, b));
}
etread.setText(sb.toString());
System.out.println(getDir("myDir", Context.MODE_APPEND));
System.out.println(getFilesDir());// /data/data/com.example.bbb/myDir
// 其中myDir是自己创建的目录
System.out.println(Arrays.toString(fileList()));// /data/data/com.example.bbb/files
// 其中files是系统创建的目录
deleteFile("tarena.dat");//删除
//----------------写--------------------------------------
// 打开输出流
OutputStream os = openFileOutput("tarena.dat",
Context.MODE_APPEND);
PrintWriter pw = new PrintWriter(os);
pw.println(etwrite.getText().toString());
pw.close();2,访问SD上的文件
步骤如下:
1)加入权限
<!-- 在SD中创建与删除文件的权限 -->
<uses-permission android:name="android.permission.MOUNT_FORMAT_FILESYSTEMS"/>
<!-- 在SD中写入数据的权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>2)编写代码是要判断SD卡是否挂载
if (Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED)){}3)文件操作
File sdCardDir = Environment.getExternalStorageDirectory(); File targetFile = new File(sdCardDir.getPath()+ "/my.dat");