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");