android数据存储方式之二 文件存储:外存储

来源:互联网 发布:伊藤开司 知乎 编辑:程序博客网 时间:2024/05/16 10:56
每一个兼容安卓的设备都会支持一个共享的用来存储文件的外部存储器,可能是一个可移除的存储媒体或者一个不可移除的存储.存储在外存储器的文件是全局可读的,并且可以使用USB大容量存储设备将文件转移到电脑中操作.
     note:如果用户将外部存储挂载到电脑上,或者移除外部文件系统,那么外存储会不可用,并且里面的文件将没有安全可言.所有的应用程序都可以读取和写入存储在外部存储器上的文件,并且用户也可以手动删除他们.

A:获取外部存储的权限
     为了读写外部存储的上的文件,应用程序必须获取(声明)权限:
READ_EXTERNAL_STORAGE
WRITE_EXTERNAL_STORAGE
例如:
<manifest ...>
   
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    ...
</manifest>
     另外,如果你同时需要读和写的权限,只需要声明一个WRITE_EXTERNAL_STORAGE的权限就可以了,因为它也暗含了读取的权限.
     note:从android4.4开始,读取和写入那些只对你的应用开放的文件时,将不再需要这些权限.

B:检查外存储媒体是否可用.
     在使用外存储进行任何操作之前,都需要调用
Environment.getExternalStorageState()
方法,检查外存储是否可用.因为外存储媒体可能被挂载到电脑,失去连接,只读,或者其他状态中,下面是一个检查其是否可用的例子:
/* 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;
}
     另外,getExternalStorageState()方法同样可以返回其他的状态,比如是否挂载到电脑,是否卸载,是否丢失等等,当我们的应用程序需要外存储的时候,就可以把这些状态信息通知给用户.

C:保存应用共享文件
     一般来说,用户使用我们的应用程序创建的保存在本地的新文件,都应该是开放的,其他应用程序也可以操作的,用户也可以轻松的从设备上拷贝使用.如果这样的话,我们应当使用共享文件目录中的一个,比如Music/Pictures/, and Ringtones/.
     只需要调用Environment.getExternalStoragePublicDirectory(String type)
就可以获取公共文件目录, DIRECTORY_MUSIC,DIRECTORY_PICTURESDIRECTORY_RINGTONES等.
     只要把文件保存在对应的类型目录,系统的扫描程序就可以把它归类.
     note:如果想要隐藏文件,只要在文件名前面加上一个"." 
     下面是一个例子程序,能够在公共图片目录中创建一个新的相册目录.
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;
}

D:保存应用私有文件:
     如果你在处理的文件不想被别的应用程序使用(比如只有本应用使用的图片或者音乐资源),就应该使用外存储的私有文件目录来存储,只要调用getExternalFilesDir (String type)方法,参数是资源类型,或者传null
     从android4.4开始便读写私有文件已经不需要权限了,但是如果你想要兼容低版本的话,还要加上.

E:保存缓存文件:
      调用 getExternalCacheDir()方法.
就可以获取到目录,使用io流写入或者读取数据了.

F:相关的参数,参考Environment类
0 0
原创粉丝点击