android 数据存储

一:Shared Preferences:用来存储私有的、原始类型的、简单的数据,通常是Key-value对

二:Internal Storage:在设备内部存储器中存储数据

三:External Storage:在设备的扩展存储上保存数据,通常是SD卡


一. Shared Preferences 

//写入    注意:所有的写入操作应该在一个Editor里面,也就是不要调用多次sp.edit()方法,每调用一次就会创建一个Editor
SharedPreferences sp =getSharedPreferences("SP",Activity.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
editor.putString("param1", "sp1");
editor.putInt("param2", 222);
editor.commit();

//读取
SharedPreferences sp =
T2.this.getSharedPreferences("SP",Activity.MODE_PRIVATE);
String p1 = sp.getString("param1","");
int p2 = sp.getInt("param2",0);

//清除指定数据
SharedPreferences userSettings= getSharedPreferences("setting", 0);
SharedPreferences.Editor editor = userSettings.edit();
editor.remove("KEY");
editor.commit();
//清空数据
SharedPreferences.Editor editor = userSettings.edit();
editor.clear();
editor.commit();

 SharedPreferences的数据以xml存储在data/data/包名/shared_prefs下面

1:getSharedPreferences():如果你想要使用多个preferences文件的话,可以通过传入一个识别的名称就可以获取到相应的SharedPreferences对象

2:getPreferences():如果一个preferences文件仅仅在当前的Activity中使用的话,你可以使用这个方法,无需要提供识别的名称。getPreferences(int mode)不需要传递文件名,默认使用不带包名的类名作为文件名(即Activity java文件名,不带后缀)

两者的具体区别请看 http://blog.csdn.net/a591193965/article/details/51105298

Activity.MODE_PRIVATE:表示该文件是私有数据,只能被应用本身访问,在该模式下,写入的内容会覆盖原文件的内容
Activity.MODE_APPEND:也是私有数据,新写入的内容会追加到原文件中
Activity.MODE_WORLD_READABLE:表示当前文件可以被其他应用读取
Activity.MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入

二:Internal Storage

当应用程序被安装到系统中后,其所在的包会有一个文件夹用于存放自己的数据,只有这个应用程序才有对这个文件夹的写入权限,这个私有的文件夹位于Android系统的/data/data/<应用程序包名>目录下,其他的应用程序都无法向这个文件夹中写入数据。

要读取应用自己的私有文件,就不能直接使用Java I/O的API了,需要使用Activity提供的方法:openFileInput或openFileOutput。

在使用openFileOutput方法的时候,需要指定打开的模式:
1:MODE_PRIVATE:默认模式,文件只可以被调用该方法的应用程序访问
2:MODE_APPEND:如果文件已存在就向该文件的末尾继续写入数据,而不是覆盖原来的数据。
3:MODE_WORLD_READABLE:赋予所有的应用程序对该文件读的权限。
4:MODE_WORLD_WRITEABLE:赋予所有的应用程序对该文件写的权限。

//openFileOutput的调用返回一个FileOutputStream对象
String username = mUsernameET.getText().toString();
                String password = mPasswordET.getText().toString();
  
                FileOutputStream fos = null;  
                try {  
                    fos = openFileOutput("login", MODE_PRIVATE);// 获得文件输出流  
                    fos.write((username + " " + password).getBytes());// 保存用户名和密码  
                    fos.flush();// 清除缓存  
                } catch (FileNotFoundException e) {  
                    e.printStackTrace();  
                } catch (IOException e) {  
                    e.printStackTrace();  
                } finally {  
                    if (fos != null) {  
                        try {  
                            fos.close();// 关闭文件输出流  
                        } catch (IOException e) {  
                            e.printStackTrace();  
                        }  
                    }  
                } 


//openFileInput的调用返回一个FileInputStream 对象
FileInputStream fis = null;  
        byte[] buffer = null;  
        try {  
            fis = openFileInput("login");// 获得文件输入流  
            buffer = new byte[fis.available()];// 定义保存数据的数组  
            fis.read(buffer);// 从输入流中读取数据  
        } catch (FileNotFoundException e) {  
            e.printStackTrace();  
        } catch (IOException e) {  
            e.printStackTrace();  
        } finally {  
            if (fis != null) {  
                try {  
                    fis.close();// 关闭文件输入流  
                } catch (IOException e) {  
                    e.printStackTrace();  
                }  
            }  
        }  
  
        String data = new String(buffer);// 获得数组中保存的数据  
        String username = data.split(" ")[0];// 获得username  
        String password = data.split(" ")[1];// 获得password  
  
        mUsernameTV.setText("账号:" + username);// 显示用户名  
        mPasswordTV.setText("密码:" + password);// 显示密码  



你可能感兴趣的:(android 数据存储)