Android数据存储访问方式-File存储方式的应用

Android的File存储方式分为两种,一种是保存在手机内存中,一种是保存在移动存储设备中(如SD卡)
前者默认是私有的,即只有本应用程序能使用,当然,可以通过设置Mode来修改权限.其保存的内容会随着应用程序的卸载而被清除,放置在/data/data/com.***/files目录下
后者是公用的(world-readable),只要有访问设备的权限,就可以对其中的内容进行读写操作,同时其中的内容能随时被清除.


内存储(私有)
/*读文件*/
FileInputStream fis = null;
try {
    fis = openFileInput("myfile1.txt");
    ByteArrayOutputStream bos = new ByteArrayOutputStream();
    byte[] buffer = new byte[1024];
    int len = 0;
    while((len = fis.read(buffer))>-1){
         bos.write(buffer, 0, len);
    }
    String temp = bos.toString();
    Log.e("abc", temp);
} catch (Exception e) {
    e.printStackTrace();
}finally{
    if(fis != null){
        try {
             fis.close();
         } catch (IOException e) {
             e.printStackTrace();
        }
    }
}

/*写文件*/
FileOutputStream fos = null;
try {
    fos = openFileOutput("myfile1.txt", 0);
    fos.write("hello world".getBytes());
} catch (Exception e) {
    e.printStackTrace();
} finally{
    if(fos != null){
        try {
            fos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}



外存储(SD卡)
检查手机上是否有额外的存储设备
调用Environment.getExternalStorageState()返回当前设备的状态
MEDIA_REMOVED:找不到设备
MEDIA_UNMOUNTED:设备尚未安装
MEDIA_CHECKING:检查中
MEDIA_NOFS:设备无效或不被支持
MEDIA_MOUNTED:能获取到设备,并接受读写操作
MEDIA_MOUNTED_READ_ONLY:能获取到设备,但只接受读操作
MEDIA_SHARED:设备尚未安装,但能通过USB设备来存储,例如与PC连接
MEDIA_BAD_REMOVAL:设备安装过,但被错误删除了
MEDIA_UNMOUNTABLE:找到设备,但安装不了
(这里的状态只是通过源代码获得,并未进行测试)
可以看出只有当状态为MEDIA_MOUNTED或者MEDIA_MOUNTED_READ_ONLY才能进行读写操作
下面是判断设备状态及获得sdcard路径的代码片段:
boolean canRead = false;
boolean canWrite = false;
String state = Environment.getExternalStorageState();
if(Environment.MEDIA_MOUNTED.equals(state)){
    canRead = canWrite = true;
}else if(Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)){
    canRead = true;
    canWrite = false;
}else{
    canRead = canWrite = false;
}

File root = Environment.getExternalStorageDirectory();//获得sdcard的根目录
File dir = new File(root+"/"+Environment.DIRECTORY_DOWNLOADS);
//File dir = getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS);//跟上面是一样的
if(!dir.exists()){
    dir.mkdirs();
}
Log.e("path", "path="+dir.getAbsolutePath());
File file = new File(dir, "text.txt");//在sdcard里新建一个文本文件
try {
    file.createNewFile();
} catch (IOException e) {
    e.printStackTrace();
}

最后,对sd卡进行操作需要设置权限,可在AndroidManifest.xml文件里添加
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 

你可能感兴趣的:(android)