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的内容:Android的数据存储(一)——SharedPreferences和IO

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

   

     

相关推荐