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----------------------------------------------->
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值