在安卓中有三种数据存储方式,一种是使用SharedPreferences,用于存储一些简单的值,就好比游戏中的分数排行榜,就可以使用此来存储;第二种是使用File存储,使用方法和JAVA PC类似,至少思想一致,同时安卓使用的是linux的文件系统,如果熟悉linux的则使用起来更方便;第三种是使用数据库,安卓使用SQLite来作为数据库存储。本文主要讲前两种方法,第三种数据使用会后面单独列一章出来,因为这部分的实验我还没做完,所以还不能详细的写。

一.SharedPreferences

其使用key-value格式保存数据,如果有简单的数据,就可以用它来保存。一个大致的使用步骤如下:

1.在string.xml中声明文件名,变量值,即key内容。我的string.xml中的一段代码如下:

<string name="preferences_file_key">preferences_file</string>
     <string name="high_scores">high_scores</string>
     <string name="high_scores_default">default_high_scores</string>

2.声明完这些就可以在activity中使用getSharedPreferences()等函数来使用这种存储方式了。
代码如下:

main.activity:
 int newScores = 2000;
 int defScores = 10000;
 SharedPreferences sharedPreferences = getSharedPreferences(getString(R.string.preferences_file_key),Context.MODE_PRIVATE);
 SharedPreferences.Editor editor = sharedPreferences.edit();
 editor.putInt(getString(R.string.high_scores_default),defScores);
 editor.putInt(getString(R.string.high_scores),newScores);
 editor.commit();display.activity:
 SharedPreferences sharedPreferences = getSharedPreferences(getString(R.string.preferences_file_key),Context.MODE_PRIVATE);
 long high_scores = sharedPreferences.getInt(getString(R.string.high_scores),R.string.high_scores_default);

二.使用内置存储卡或者外置存储卡来保存数据:

使用过安卓的人都知道安卓有内置存储空间与外置存储空间,也即internal storage和external storage。两者的区别主要在于Internal随时可得,因为你无法卸载一个内置存储空间;第二个是其仅对你的app适用;第三个是当你卸载你的app时,所有文件都会被删除。external的区别主要在于,它不是随时可得的,因为你可能会unmount一个sdcard;第二个是它对所有app都是可见的;第三个是当你卸载app时,某些文件可能被一同删除,但是一些就可能被保留。

另外对于文件的读写操作与java.io是一致的,所以如果你熟悉java.io,那么使用安卓的文件就非常容易了。

1.下面是一个使用internal的示例:

String fileName = "myFile";
 File myFile = new File(getFilesDir(),fileName);
 myFile.mkdir();

 String message = "this is my first android file";
 FileOutputStream fileOutputStream;
 FileInputStream fileInputStream;try{
     fileOutputStream = myFile.openFileOutput(fileName,Context.MODE_PRIVATE);
     myFile.write(message.getBytes());
     myFile.close();    fileInputStream = myFile.openFileInput(fileName);
     byte[] string = new byte[50];
     fileInputStream.read(string);
     System.out.println(new String(string));
 }catch(IOException e){
     e.printStackTrace();
 }

还有一个安卓文件的函数叫getCacheDir(),从名字就可以看出,其多半用于建立临时文件,或者缓存只用。一个示例如下:

try{
     File file = File.createTempFile(fileName,null,getCacheDir());
 }catch(IOException e){
     e.printStackTrace();
 }

当启动app后,就可以在logcat里面看到显示的这段文字。

2.使用external:

使用external之前,需要在Manifest中声明权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />String state = Environment.getExternalStorageState();
 if(Environment.MEDIA_MOUNTED.equals(state)){
     File file= new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES),"my_1");
     if(!file.mkdir()){Log.e(LOG_TAG1,"can't create directory1");}
 }

 if(Environment.MEDIA_MOUNTED.equals(state) || Environment.MEDIA_MOUNTED_READ_ONLY.equals(state) ){
     File file = new File(getExternalFilesDir(Environment.DIRECTORY_MUSICE),"my_2");
     if(!file.mkdir()){Log.e(LOG_TAG2,"can't create directory2");}
 }

getExternalStorageState():这个函数用于返回当前sdcard的状态,是否可操作

getExternalStoragePublicDirectory():这个函数用于返回代表当前目录的一个目录句柄,同时使用这个函数创建的文件是被所有app都可见的,同时app卸载后该文件将会被保留。

getExternalFilesDir():这些文件也是均可得的,但是需要知道文件的目录及名字才行,同时卸载app后这些文件也会被一并卸载。

三.getFreeSpace()可以返回当前可得的空闲空间,但是并不代表写请求就会被满足,这得取决于系统当前状态。fileName.delete()用于删除创建的文件。