Android学习总结1

在Android中读写文件

  • RAM:运行内存,相当于电脑的内存
  • ROM:内部存储空间,相当于电脑的硬盘
    • Android手机必须有的
  • SD卡:外部存储空间,相当于电脑的移动硬盘
    • 不是必须的
  • 现在手机自带的空间都属于外部存储,然后手机基本内部外部共享同一个存储设备

内部存储路径

  • 所有安装至手机的应用都会在data/data目录下生成一个包名文件夹,这个文件夹就是内部存储的路径
  • 应用只能在自己的包名文件夹中读写文件
  • getFilesDir()内部存储路径获取 // data/data/包名/files
  • File file = new File(getFilesDir(),"文件名.后缀");
  • getCacheDir() //data/data/包名/cache 内部存储空间不足时,cache文件夹中的内容会被删除

外部存储路径

  • Environment.getExternalStorageDirectory()
  • Environment.getExternalStorageState() //返回sd卡的状态,常用的有:
    • MEDIA_REMOVED:sd卡不存在
    • MEDIA_UNMOUNTED:sd卡存在,但是没有挂载,
    • MEDIA_CHECKING:sd卡正在遍历,
    • MEDIA_MOUNTED:sd卡可用
  • if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) //判断sd卡是否可用

获取sd卡空间

  • 存储设备会被分为若干个区块
  • 每个区块的大小 * 区块总数 = 存储设备的总大小
  • 每个区块的大小 * 可用区块的数量 = 存储设备可用大小
  • File path = Environment.getExternalStorageDirectory();
  • StatFs stat = new StatFs(path.getPath());
  • long blockSize = stat.getBlockSize(); //每个区块的大小
  • long totalBlocks = stat.getBlockCount(); //区块总数
  • long availableBlocks = stat.getAvailableBlocks(); //可用区块的数量 #### 4.3以上用:
  • long blockSize = stat.getBlockSizeLong(); //每个区块的大小
  • long totalBlocks = stat.getBlockCountLong(); //区块总数
  • long availableBlocks = stat.getAvailableBlocksLong(); //可用区块的数量
  • private String formatSize(long size){ //格式化文件大小
  •        reutrn Formatter.formatFileSize(this,size);
  • }

判断当前应用sdk的版本

  • if(Build.VERSION.SDKINT >= Build.VERSIONCODES.JELLYBEANMR2) //例如判断当前是否大于等于18

文件访问权限

  • 每一个应用都是一个用户
  • drwxrwxrwx
  • 第一个字母 d

    • d:表示文件夹
    • -:表示文件
    • l:快捷方式
  • 第一组rwx:文件拥有者(owner)的权限

    • r:读
    • w:写
    • X:执行execute
  • 第二组rwx:与文件拥有者同一用户组的用户(grouper)

  • 第三组rwx:其化用户(other)的权限

SharedPreference

  • 以键值对的形式保存数据
  • 适合存放零散简单的数据
  • 原理其实是生成xml文件去保存

xml序列化器


    //获取xml序列化器
    XmlSerializer xs = Xml.newSerializer();
    File file = new File(Environment.getExternalStorageDirectory(), "sms.xml");
    FileOutputStream fos = null;
    try {
        fos = new FileOutputStream(file);
        //初始化
        //xml文件用什么编码生成
        xs.setOutput(fos, "utf-8");
        //开始生成xml文件
        //生成头节点
        xs.startDocument("utf-8", true);
        xs.startTag(null, "smss");
        for (Sms sms : smsList) {
            xs.startTag(null, "sms");
            xs.startTag(null, "body");
            xs.text(sms.getBody());
            xs.endTag(null, "body");

            xs.startTag(null, "date");
            xs.text(sms.getDate() + "");
            xs.endTag(null, "date");

            xs.startTag(null, "type");
            xs.text(sms.getType() + "");
            xs.endTag(null, "type");

            xs.startTag(null, "address");
            xs.text(sms.getAddress());
            xs.endTag(null, "address");

            xs.endTag(null, "sms");
        }
        xs.endTag(null, "smss");
        //告知序列化器生成xml结束
        //生成尾节点
        xs.endDocument();
    } catch (Exception e) {
        e.printStackTrace();
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值