http://www.cnblogs.com/gcg0036/p/4321278.html
如果想保存一个相对较小的key-values集合,可以使用 SharedPreferences API. SharedPreferences对象指向包含key-value对的文件,并且提供简单的读写方式。每个SharedPreferences文件均由框架管理,私人或共享均可使用。
可以保存任何简单类型的数据:boolean、float、int、long 和 string 。 这些数据是持久保存的,可以跨越用户会话(即使应用程序被杀死了也没关系)。
您可以创建新的共享首选项文件,或者采取两种方式之一来调用现有文件。
Context context = getActivity(); SharedPreferences sharedPref = context.getSharedPreferences( getString(R.string.preference_file_key), Context.MODE_PRIVATE);
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
读取,可以使用getInt() 、 getString()等调用方法来提供你想要的关键值,当键不存在时会返回某个默认值
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); int defaultValue = getResources().getInteger(R.string.saved_high_score_default); long highScore = sharedPref.getInt(getString(R.string.saved_high_score), defaultValue);
写入,需要调用SharedPreferences上的edit()来创建SharedPreferences.Editor,然后调用commit()来保存
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE); SharedPreferences.Editor editor = sharedPref.edit(); editor.putInt(getString(R.string.saved_high_score), newHighScore); editor.commit();
File 对象适用于在start-to-finish读取或写入大量数据,File对象适合于读取或者写入大量数据
要写入外部存储,就必须在 manifest file中请求 WRITE_EXTERNAL_STORAGE的权限。
<manifest ...> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> ... </manifest>
内部存储文件不需要任何权限。应用程序始终有权在其内部存储目录读取及写入文件。
注意: 自 Android 4.4 开始,如果只是读写应用程序私有的文件,则不再需要申请上述权限了。
String filename = "myfile"; String string = "Hello world!"; FileOutputStream outputStream; try { outputStream = openFileOutput(filename, Context.MODE_PRIVATE); outputStream.write(string.getBytes()); outputStream.close(); } catch (Exception e) { e.printStackTrace(); }
如果需要缓存文件,就应该使用createTempFile()。例如从URL中提取文件名并且在应用程序内部缓存目录创建文件,方法如下:
public File getTempFile(Context context, String url) { File file; try { String fileName = Uri.parse(url).getLastPathSegment(); file = File.createTempFile(fileName, null, context.getCacheDir()); catch (IOException e) { // Error while creating file } return file; }
在外部存储保存文件
/* Checks if external storage is available for read and write */ public boolean isExternalStorageWritable() { String state = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED.equals(state)) { return true; } return false; } /* Checks if external storage is available to at least read */ public boolean isExternalStorageReadable() { String state = Environment.getExternalStorageState(); if (Environment.MEDIA_MOUNTED.equals(state) || Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) { return true; } return false; }
public File getAlbumStorageDir(String albumName) { // Get the directory for the user's public pictures directory. File file = new File(Environment.getExternalStoragePublicDirectory( Environment.DIRECTORY_PICTURES), albumName); if (!file.mkdirs()) { Log.e(LOG_TAG, "Directory not created"); } return file; }
public File getAlbumStorageDir(Context context, String albumName) { // Get the directory for the app's private pictures directory. File file = new File(context.getExternalFilesDir( Environment.DIRECTORY_PICTURES), albumName); if (!file.mkdirs()) { Log.e(LOG_TAG, "Directory not created"); } return file; }
使用API常量比如DIRECTORY_PICTURES提供的目录名称是很重要的。这些目录名称确保系统可以适当处理文件。例如保存在 DIRECTORY_RINGTONES的文件由系统媒体扫描来进行铃声分类而不是音乐分类.
getFreeSpace() 和 getTotalSpace()可以找出是否有足够的可用空间
删除文件可以是delete()。deleteFile()来请求Context定位和删除文件