Android学习之SD卡操作

版权声明: https://blog.csdn.net/qq_41573860/article/details/88829852

1.权限声明

对于SD卡的读写,需要申请对应的权限,即在主配置文件中添加对应的权限请求

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

2.判断SD卡是否可读写

判断可读:

Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())||
Environment.MEDIA_MOUNTED_READ_ONLY.equals(Environment.getExternalStorageState())

 判断可写:

Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())

3.公有文件与私有文件

a.公有文件:该类文件对于用户及APP是公开使用的,即使APP被卸载后但这些文件依旧会保存在内存中,比如拍摄的照片,视频,下载的文件等等。

保存为公有文件的方法:建议使用getExternalStoragePublicDirectory()方法来生成一个File对象,该对象表示存储在外部存储的目录。这个方法需要带有一个特定的参数来指定这些公有文件的文件类型,与便于与其他公有文件进行分类。

参数类型:该系列参数均已在Environment类中定义,可直接使用。DIRECTORY_MUSIC(音乐),DIRECTORY_PICTURE(图片),DIRECTORY_DOCUMENTS(文档文件),DIRECTORY_DOWNLOADS(下载的文件),DIRECTORY_MOVIES(视频文件)等等。

实现:

public File getAlbumStorageDir(String albunmName){
File file = new File(Environment.getExternalStoragePublicDirectory(
    Environment.DIRECTORY_PICTURES),albumName);
    if(!file.mkdir()){
    Log.e(LOG_TAG,"没有对应的文件夹");
    }
    return file;
}

b.私有文件:该类文件完全私有,仅供APP使用,在APP卸载后这些文件将会被删除。这些文件虽然存储在SD卡上,并且其他程序或者用户有可能访问,但这些文件对于他们没有任何意义,比如APP上缓存的音频,视频等文件。

保存为私有文件的方法:通过getExternalFilesDir()来获取对应的目录,并且传递一个指示文件类型的参数,以这种方式创建的每一个目录都会被添加到External Storage,并且封装在APP目录的参数文件夹下,该文件夹在APP被卸载的时候会被系统删除。

实现:

public File getAlbumStorageDir(Context context,String albumName){
    File file = new FIle(context.getExternalFileDir(
        Environment.DIRECTORY_PICTURES),albumName);
            if(!mkdirs()){
                Log.e(LOG_TAG,"没有对应的文件夹");
            }
    return file;
}

4.查询剩余空间

在保存文件时,可以通过getFreeSpace()(当前可用空间)或者getTotalSpace()(系统总容量)来判断是否有足够的空间来保存文件,从而避免发生异常。

实现:

long freeSpace = Environment.getExternalStorageDirectory().getFreeSpace();
String freeSize = Formatter.formatFileSize(getApplicationContext(),freeSpace);

freeSize即剩余可用空间

5.删除文件

最直接的方法是执行文件的delete()方法

myFile.delete();

若文件保存在Internal Storage中,可以通过COntext来访问,可以通过deleteFile()来删除

myContext.deleteFile(fileName);

ps:当APP被卸载后,Android系统会自动删除以下文件:

a.所有保存到Internal Storage的文件

b.所有使用getExternalFileDir()方式保存在External Storage的文件

另外我们应该手动删除所有通过getCacheDir()方式创建的缓存文件,以及不会再用到的文件。

猜你喜欢

转载自blog.csdn.net/qq_41573860/article/details/88829852