android,内部存储,外部存储,权限理解

\



这是我的一些理解: 最基本的-->现在智能手机看似不让你外置内存卡(SD卡),它只是为了赚取利润,手机内部其实还是分内部存储和外部存储的(SD卡厂商自己焊接在里面),
  文章中所讲的内部存储其实就是手机自带的内存,(如果你不理解内存和SD卡区别,自行百度),外部存储就是SD卡
 
下面的文字是对上图的一些解释,如果对于存储位置不太清楚,看上图就行

首先android 的文件存储有两大类(API),第一个是Context类(主要是内部存储),第二个是Environment类  (主要是外部存储)

cache与files的差别在于,如果手机的内部存储控件不够了,会自行选择cache目录进行删除,因此,不要把重要的文件放在cache文件里面,可以放置在files里面,因为这个文件只有在APP被卸载的时候才会被删除,context类获得的file,当app被删除的时候,它也会被删除(包括context.getExternal...),Environment产生的file,不会被删除
----------------------------------内部存储----START-------------------------------------------------->
当是Context类的时候,它是存储在内存里面 比如说 : this.getFilesDir() 以及 getCashFile()  (不允许其他程序访问)  (获得 root 权限就可以看到存储的位置)
  它存储的都是位于data/data/包名/files或者cash里面,它是不允许外部程序访问的,一般存储都不要在这里存储,另外,SharedPreferences也处在内部存储,不允许其它程序访问,当你删除应用的时候,系统会删除这些文件夹
SQlite数据库的存储位置也是在这里---> data/data/包名/databases 目录中

   注意 : 如果是 context.getExternal...这样的,它的位置应该都是在SD卡即在外部存储中

----------------------------------内部存储----END-------------------------------------------------->



-----------------------外部存储(其位置就在sd卡根目录)-----START---------------------------->
当它是Environment类的时候,它存储的位置是下图所示 ,分为两种情况 : (允许任意程序访问) ,你可以测试,不要忘记添加权限.
其一是 : 共有的 Environment.getExternalStoragePublicDirectory();  -----> 如果卸载app,无法卸载该类的文件夹
       这一类比如说,出厂设置的程序,录音,视频,音乐,以及图片,其它程序都可以访问
第二种情况是 Environment.getExternalFilesDir(),----->卸载app,外部存储数据不会被删除,你可以自己去实现删除效果

    这是B程序的读取流程, 文件写入,或者说读取的位置就是在外部存储的根目录下面

private void readFile(Context context) {
    try {
        File file = new File(Environment.getExternalStorageDirectory(), "a.txt");
        FileInputStream fileInputStream = new FileInputStream(file);
       /* int b;
        while ((b = fileInputStream.read()) != -1) {
            Log.e("读取结果是:;;;", (char)b + "");
        }*/
        FileReader fileReader = new FileReader(file);
        BufferedReader reader = new BufferedReader(fileReader);
        String result;
        while ((result = reader.readLine()) != null) {
            Log.e("读取的结果是;;;;", result);
        }
        reader.close();
        Toast.makeText(context, "B读取成功", Toast.LENGTH_SHORT).show();
    } catch (Exception e) {
        e.printStackTrace();
        Toast.makeText(context, "B读取失败", Toast.LENGTH_SHORT).show();
    }
}
-------------------------------------END----------------------------------------------->
发布了18 篇原创文章 · 获赞 4 · 访问量 3万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览