• Android数据存储:SDCard


    Android数据存储之SDCard

    0、获取sd卡路径。
    1、讲述 Environment 类。
    2、讲述 StatFs 类。
    3、完整例子读取 SDCard 内存

    0、获取sd卡路径
    方法一: private String folder = "/sdcard/DCIM/Camera/"(SD卡上拍照程序的图片存储路径); //写死绝对路径,不赞成使用

    方法二:
    public String getSDPath(){
           File sdDir = null;
           boolean sdCardExist = Environment.getExternalStorageState().equals(Android.os.Environment.MEDIA_MOUNTED);   //判断sd卡是否存在
           if   (sdCardExist){                              
             sdDir = Environment.getExternalStorageDirectory();//获取跟目录
           }  
           return sdDir.toString(); 
    }
    然后:在后面加上斜杠,在加上文件名
    String fileName = getSDPath() +"/" + name;//以name存在目录中

    1、讲述 Environment 类
    Environment 是一个提供访问环境变量的类。
    Environment 包含常量:
    MEDIA_BAD_REMOVAL
    解释:返回getExternalStorageState() ,表明SDCard 被卸载前己被移除
    MEDIA_CHECKING
    解释:返回getExternalStorageState() ,表明对象正在磁盘检查。
    MEDIA_MOUNTED
    解释:返回getExternalStorageState() ,表明对象是否存在并具有读/写权限
    MEDIA_MOUNTED_READ_ONLY
    解释:返回getExternalStorageState() ,表明对象权限为只读
    MEDIA_NOFS
    解释:返回getExternalStorageState() ,表明对象为空白或正在使用不受支持的文件系统。
    MEDIA_REMOVED
    解释:返回getExternalStorageState() ,如果不存在 SDCard 返回
    MEDIA_SHARED
    解释:返回getExternalStorageState() ,如果 SDCard 未安装 ,并通过 USB 大容量存储共享 返回
    MEDIA_UNMOUNTABLE
    解释:返回getExternalStorageState() ,返回 SDCard 不可被安装 如果 SDCard 是存在但不可以被安装
    MEDIA_UNMOUNTED
    解释:返回getExternalStorageState() ,返回 SDCard 已卸掉如果 SDCard   是存在但是没有被安装
    Environment 常用方法:
    方法:getDataDirectory()
    解释:返回 File ,获取 Android 数据目录。
    方法:getDownloadCacheDirectory()
    解释:返回 File ,获取 Android 下载/缓存内容目录。
    方法:getExternalStorageDirectory()
    解释:返回 File ,获取外部存储目录即 SDCard
    方法:getExternalStoragePublicDirectory(String type)
    解释:返回 File ,取一个高端的公用的外部存储器目录来摆放某些类型的文件
    方法:getExternalStorageState()
    解释:返回 File ,获取外部存储设备的当前状态
    方法:getRootDirectory()
    解释:返回 File ,获取 Android 的根目录

    2、讲述 StatFs 类
    StatFs 一个模拟linux的df命令的一个类,获得SD卡和手机内存的使用情况
    StatFs 常用方法:
    getAvailableBlocks()
    解释:返回 Int ,获取当前可用的存储空间
    getBlockCount()
    解释:返回 Int ,获取该区域可用的文件系统数
    getBlockSize()
    解释:返回 Int ,大小,以字节为单位,一个文件系统
    getFreeBlocks()
    解释:返回 Int ,该块区域剩余的空间
    restat(String path)
    解释:执行一个由该对象所引用的文件系统

    3、完整例子读取 SDCard 内存
    链接:http://www.linuxidc.com/Linux/2011-02/32603p2.htm

    例子:在AndroidManifest.xml中加入访问SDCard的权限如下:
    <!-- 在SDCard中创建与删除文件权限 -->
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
    <!-- 往SDCard写入数据权限 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

    对SDCard进行读写操作:
        public String getFileFromSdcard(String fileName){
            FileInputStream inputStream = null;
            //缓存的流,和磁盘无关,不需要关闭
            ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
            File file = new File(Environment.getExternalStorageDirectory(),fileName);
            if(Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())){
                try{
                    inputStream = new FileInputStream(file);
                    int len = 0;
                    byte[] data = new byte[1024];
                    while((len = inputStream.read(data))!=-1){
                        outputStream.write(data, 0, len);
                    }
                }catch(FileNotFoundException e){
                    e.printStackTrace();
                }catch(IOException e){
                    e.printStackTrace();
                }finally{
                    if(inputStream!=null){
                        try{
                            inputStream.close();
                        }catch(IOException e){
                            e.printStackTrace();
                        }
                    }
                }
            }
            return new String(outputStream.toByteArray());
        }
        public boolean saveContentToSdcard(String fileName,String content){
            boolean flag = false;
            FileOutputStream fileOutputStream = null;
            //获得sdcard卡所在的路径
            File file = new File(Environment.getExternalStorageDirectory(),fileName);
            //判断sdcard卡是否可用
            if(Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())){
                try{
                    fileOutputStream = new FileOutputStream(file);
                    fileOutputStream.write(content.getBytes());
                    flag = true;
                } catch(FileNotFoundException e){
                    e.printStackTrace();
                } catch (IOException e){
                    e.printStackTrace();
                } finally{
                    if(fileOutputStream != null){
                        try{
                            fileOutputStream.close();
                        } catch (IOException e){
                            e.printStackTrace();
                        }
                    }
                }
            }
            return flag;
        }

    相关参考链接:
    相关代码下载链接:http://download.csdn.net/detail/klcf0220/5890439

  • 相关阅读:
    练习二十七:递归函数应用
    mysql8.0数据库忘记密码时进行修改方法
    格式化字符串两种方式
    练习二十六:阶乘计算(递归)
    练习二十五:阶乘之和计算
    Dapper批量添加
    c# FTP操作类(转)
    c# 依赖注入之---反射(转)
    c# 依赖注入之---setterInjection(转)
    php遍历数组赋值
  • 原文地址:https://www.cnblogs.com/klcf0220/p/3245508.html
Copyright © 2020-2023  润新知