Android文件存储基础

手机内部存储

. 手机内部存储,默认在/data/data/<包名>/files文件夹下存放。

手机内部存储的特点:

1:存放本应用的私有数据,当应用卸载时,/data/data/<包名>这个目录会同步删除,即手机内部存储的文件会删除
* 关注点:
& Context.openFileOutput(String name, int mode)
- 往手机内部存储中以某种模式写文件
- name :文件名
- mode :文件操作模式
- return:FileOutputStream
- 文件存放在/data/data/包名/files/
. Context.openFileInput(String name) 从手机内部存储中读取文件
- 从手机内部存储中读文件
- name:文件名
- return:FileInputStream
. getCacheDir() 方法用于获取/data/data//cache目录
. getFilesDir() 方法用于获取/data/data//files目录

文件操作模式
这里写图片描述

外部存储

. . 所有兼容Android的设备都支持一个可共享的“外部存储(external storage)”,可用来保存文件。这可以是一个可移动的存储设备(比如SD卡)或者一个内部的(不可移动的)存储。保存在外部存储的文件是可全局读写的。

Sdcard存储的特点:

. 依赖于Sdcard,使用SDCard存储,需先检测其状态
. 存在Sdcard的文件是可全局读写的
. 写入Sdcard时,需要权限
* 关注点:
. Environment.getExternalStorageState() 取得外部存储状态
. Environment.getExternalStorageDirectory() 取得外部存储根路径
. 写入外部存储的权限
android.permission.MOUNT_UNMOUNT_FILESYSTEMS
android.permission.WRITE_EXTERNAL_STORAGE
* 外存路径描述
. 取得外部存储的公共共享存储路径
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
. 在外存中存放应用的私有文件,当应用删除时,该内容会同步删除 :
context.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS)
目录: /android/data/<包名>/files/<类型>
.在外存中存放应用的私有缓存文件 ,当应用删除时,该内容会同步删除
context.getExternalCacheDir()
目录:/android/data/<包名>/cache
.取得外存的根路径
Environment.getExternalStorageDirectory()

代码实现(手机内部存取)

//存文件到手机内存
    public void saveToPhone(String filename, String fileBody) 
throws Exception{
//以私有模式打开文件,假如filename不存在,
//则创建该文件,路径:/data/data/<包名>
        FileOutputStream fos=
context.openFileOutput(filename, Context.MODE_APPEND);
        //把内容写到输出流中
        fos.write(fileBody.getBytes());
        //关闭输出流
        fos.close();
    }
   //从手机内部存储读文件
    public String readFromPhone(String filename) throws Exception{
        //从手机内存中读文件,路径:/data/data/<包名>
        FileInputStream fis=context.openFileInput(filename);
        //字节数组输出流
        ByteArrayOutputStream baos=new ByteArrayOutputStream();
        byte[] buffer=new byte[1024];
        int len=-1;
        while((len=fis.read(buffer))!=-1){
            baos.write(buffer, 0, len);
        }
        //关闭内存中的字节数组输出流
        baos.close();
        //关闭输入流
        fis.close();
        return new String(baos.toByteArray());
    }

代码实现(SDCard存取)

//存文件到sdcard
    public void saveToSdcard(String filename, String fileBody) 
throws Exception {
        /**
         * 写数据到sdcard
         * 1、先判断sdcard 是否挂载
         * 2、假如有:获取sdcard 路径
         * 3、在sdcard中创建文件,并且开辟输出流
         * 4、写数据到输出流
         * 5、关闭输出流
         */
        //假如Sdcard挂载成功
        if(Environment.getExternalStorageState()
.equals(Environment.MEDIA_MOUNTED)){
            //获得Sdcard的根目录
            File root=Environment.getExternalStorageDirectory();
            File file=new File(root, filename);
            FileOutputStream fos=new FileOutputStream(file);
            fos.write(fileBody.getBytes());
            fos.close();
        }
    }
    //从SDCard读文件
    public String readFromSdcard(String filename)throws Exception {
        //判断SDCard状态
      if(Environment.getExternalStorageState()
.equals(Environment.MEDIA_MOUNTED)){
            //获取外存的根路径
            File root=Environment.getExternalStorageDirectory();
            //创建文件
            File file=new File(root, filename);
            //开辟输入流
            FileInputStream fis=new FileInputStream(file);
            //缓存
            ByteArrayOutputStream baos=new ByteArrayOutputStream();
            byte[] buffer=new byte[1024];
            int len=-1;
            while((len=fis.read(buffer))!=-1){
                baos.write(buffer, 0, len);
            }
            baos.close();
            fis.close();
            return new String(baos.toByteArray());
        }
        return null;
    }

个人笔记仅供参考,如果有误,欢迎指出。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值