在上一篇文章中我们介绍了SharedPreferences的使用方法。

今天我们继续介绍另一种储存数据的方式:使用内部储存和外部储存

每一个Android设备都拥有两个数据储存区域:外部储存和外部储存

那么我们应该采用哪种储存方式呢?

我们先对比一下这两种储存方式的不同:

内部储存:

  • 总是可用的
  • 保存在这里的文件只能被你的app访问
  • 当程序被卸载的时候,系统会删除所有属于该应用的文件

    当你不希望你的文件被其他人或应用访问到的时候,内部储存是最好的选择

外部储存:

  • 当sd卡被用户卸载的时候不可用,因此可能需要做额外的检测动作
  • 外部储存可被所有人或应用读取,安全性差
  • 当应用被卸载的时候,只有保存在通过getExternalFilesDir()获取的路径上的文件被删除

    当储存空间紧缺和文件的访问不需要被限制的时候,外部储存是最好的选择

保存文件到内部储存

文件的操作主要用到java的io包里面的类。

要获取属于你的程序的储存空间,可以使用下面的两个方法:

getFilesDir()

返回一个File类型的内部储存路径

getCacheDir()

返回一个File类型的内部临时储存路径

先看一下运行效果:

运行完毕到Eclipse的ddms视图就可以看到文件已经被写入:

详细代码:

package com.whathecode.storageoptinos;import java.io.FileOutputStream;import android.app.Activity;import android.content.Context;import android.content.SharedPreferences;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;public class MainActivity extends Activity{@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);final EditText namefield = (EditText) findViewById(R.id.username);final EditText agefield = (EditText) findViewById(R.id.age);Button btnWrite = (Button) findViewById(R.id.write);SharedPreferences spf = getSharedPreferences("record", MODE_PRIVATE);// 获取编辑器final SharedPreferences.Editor editor = spf.edit();btnWrite.setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View v){String filename = "person.txt";// File file = new File(getBaseContext().getFilesDir(),// filename);String username = namefield.getText().toString();String age = agefield.getText().toString();try{FileOutputStream openFileOutput = openFileOutput(filename,Context.MODE_PRIVATE);openFileOutput.write(username.getBytes());openFileOutput.write(age.getBytes());openFileOutput.close();Toast.makeText(getBaseContext(),"file saved at " + getFilesDir().toString(),Toast.LENGTH_LONG).show();} catch (Exception e){e.printStackTrace();}}});}}

保存文件到外部储存

和内部储存不同,写文件到外部储存需要在AndroidManifest文件中获取相应的权限。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

当你的程序获得了写外部储存的权限的时候,同时隐式地获得读的权限,因此不需要另外添加读的权限。

运行结果:

程序代码:

package com.whathecode.storageoptinos;import java.io.File;import java.io.FileOutputStream;import android.app.Activity;import android.os.Bundle;import android.os.Environment;import android.view.View;import android.widget.Button;import android.widget.EditText;import android.widget.Toast;public class MainActivity extends Activity{@Overrideprotected void onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);final EditText namefield = (EditText) findViewById(R.id.username);final EditText agefield = (EditText) findViewById(R.id.age);Button btnWrite = (Button) findViewById(R.id.write);btnWrite.setOnClickListener(new View.OnClickListener(){@Overridepublic void onClick(View v){String filename = "person.txt";String externDir = getExternalFilesDir(null).toString();// 准备数据写入String username = namefield.getText().toString();String age = agefield.getText().toString();// 判断sd卡是否挂载,sd卡存在则开始写入文件if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){try{FileOutputStream fos = new FileOutputStream(new File(externDir, filename));fos.write(username.getBytes());fos.write(age.getBytes());fos.close();Toast.makeText(getBaseContext(),"file saved at " + externDir, Toast.LENGTH_LONG).show();} catch (Exception e){e.printStackTrace();}} else{Toast.makeText(getBaseContext(), "SD卡不存在",Toast.LENGTH_SHORT).show();}}});}}

文件保存路径:

更多相关文章

  1. Android调用so文件(C代码库)方法详解
  2. android 文件夹的命名和作用,屏幕适配很有用!
  3. android之ListPreference的用法_PreferenceActivity用法
  4. Android(安卓)AIDL介绍
  5. Android(安卓)Fragment 解析
  6. Android(安卓)OkHttp完全解析 是时候来了解OkHttp了
  7. Android(安卓)Studio 文件提前结束
  8. Android实现拍照及图片显示效果
  9. 二,HelloWorld 及源码关联 & Manifest 类关联

随机推荐

  1. 【Android】在不同的线程池中执行AsyncTa
  2. 用c#开发安卓程序 (xamarin.android)系列
  3. [置顶] [Android(安卓)Studio 权威教程]Win
  4. 【30篇突击 android】源码统计 十九
  5. eclipse 上调试android的自带应用方法
  6. 修改android monkey源码使其支持UI自动化
  7. android学习一: 系统架构
  8. Android(安卓)M 运行时权限
  9. Android(安卓)自定义复合组件Demo
  10. Android(安卓)EditText加载HTML内容(内容