Android 内部存储于外部存储以及getFilesDir()/getExternalFilesDir()

打开Android studio中的Device file Explorer

1.内部存储

在Device file Explorer视图中有个data目录
在这里插入图片描述
这个data根目录下面还有个data目录,然后就能找到自己应用的包名文件夹,其所对应的存储空间就是Android的内部存储,展开data/data/package_name/ ,该路径下可以保存cache、SharedPreference、数据库文件、以及一些自己创建的file文件等。这些内部存储里面的数据就会随着应用的卸载而被删除
在这里插入图片描述

2.外部存储

同样是在Device file Explorer视图中,可以看到/mnt/sdcard或者/sdcard目录。/sdcard其实就是sd挂载到设备上的一个软连接,相当于/mnt/sdcard的一个快捷方式。这个存储空间就是Android的外部存储
在这里插入图片描述
展开sdcard这个文件夹
在这里插入图片描述
里面有10个文件夹,其中除了Android这个文件夹为私有文件夹。其他几个都是公用空间,主要是用来存放音乐、视频、图片、下载文件等等信息。当你把Android手机连接到电脑上,然后电脑能识别出来的内容就是外部存储。不太恰当地说,Android的内部存储和外部存储划分的界限应该是一个app所对应的包名里面和外面的存储空间。在自己包名(com.example.xxx.xxx)里面的内容就只有自己能访问也就是内部存储,和在公共区域(比如相册,音乐,下载等文件夹)里面大家如果取得了权限都可以去访问也就是外部存储。

3.Android中的文件输入输出流

几个方法的比较:
openFileOutput()
getFilesDir()
getDataDirectory()
getExternalFilesDir()

/**
  *这个方法打开的就是data/data/package_name/files/目录下的文件
  *刚开始看到这个方法的时候还在好奇“我就传了个文件名,它是怎么找到这个文件的(/滑稽.png)”
  *再这个目录下面如果没有fileName这儿名儿的文件 那么系统就会创建一个
  */
openFileOutput(String fileName, int mode);

/**
  *这个方法返回的路径就是 /data/data/com.example.savefiledemo/files
  *返回的是内部存储下的文件夹,不是文件
  */
getFilesDir();

//返回内部存储的根目录 /data
getDataDirectory();

/**
   *传入的参数有Environment_DCIM、Environment_MUSIC、Environment_DOWNLOADS等等
   *返回路径(Environment_MUSIC) sdcard/Android/data/com.example.savefiledemo/files/Music
   */
getExternalFilesDir(String type);

3.1向文件中写入内容

/**
     * 在data/data/package_name/file/ 目录下创建文件并写入内容
     * @param context  传入上下文
     * @param fileName 要创建或者已经存在的文件名 eg: demo.txt
     * @param content  要写入文件的内容
     */
public static void writeToFile(Context context, String fileName, String content) {
        try {
            FileOutputStream fos = context.openFileOutput(fileName, Context.MODE_PRIVATE);
            fos.write(content.getBytes());
            fos.flush();
            fos.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

3.2从文件中读取内容

/**
     * 读取文件的内容
     * @param context 传入的上下文
     * @param fileName 要读取的文件名
     * @return 读取出来的内容
     */
    public static String readToFile(Context context,String fileName){
        StringBuilder builder = new StringBuilder();
        try {
            byte[] bytes = new byte[1024];
            FileInputStream fis = context.openFileInput(fileName);
            int len = 0;
            while ((len = fis.read(bytes)) != -1){
                builder.append(new String(bytes,0,len));
            }

            fis.close();

        } catch (Exception e) {
            e.printStackTrace();
        }

        return builder.toString();
    }
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值