只要是需要进行联网获取数据的APP,都会在本地产生缓存文件。那么,这些缓存文件到底放在什地方合适呢?系统有没有给我们提供建议的缓存位置呢?不同的缓存位置有什么不同呢?

考虑到卸载APP必须删除缓存

在Android手机里面,缓存的位置分为两类,一类是Internal Storage,另外一类是External Storage,

Internal Storage(内部存储)

   你的app的internal storage 目录是以你的app的包名作为标识存放在Android文件系统的特定目录下[data/data/com.example.xx]

  若是你没有设置为可读或者可写,其他app是没有办法读写的。因此只要你使用MODE_PRIVATE ,那么这些文件就不可能被其他app所访问

  内部存储在你的APP卸载的时候,会一块被删除

  我们可以在cache目录里面放置我们的图片缓存,而且cache与files的差别在于,如果手机的内部存储控件不够了,会自行选择cache目录进行删除,因此,不要把重  要的文件放在cache文件里面

  1. File file1 = new File(getFilesDir(), "getFilesDir.txt");
  2. Log.d("TAG", "file1=" + file1.getAbsolutePath());
  3. try {
  4. OutputStream outputStream1 = new FileOutputStream(file1);
  5. outputStream1.write("file".getBytes());
  6. outputStream1.close();
  7. } catch (Exception e) {
  8. e.printStackTrace();
  9. }

  运行结果

    1. 02-03 07:18:04.068  22237-22237/? D/TAG﹕ file1=/data/data/com.socks.baidudemo/files/getFilesDir.txt

  

  1. File file2 = new File(getCacheDir(), "cache.txt");
  2. Log.d("TAG", "file2=" + file2.getAbsolutePath());
  3. try {
  4. OutputStream outputStream1 = new FileOutputStream(file2);
  5. outputStream1.write("cache".getBytes());
  6. outputStream1.close();
  7. } catch (Exception e) {
  8. e.printStackTrace();
  9. }

    运行结果

      02-03 07:19:31.508  23652-23652/? D/TAG﹕ file2=/data/data/com.socks.baidudemo/cache/cache.txt

  以下是运行后的效果

Internal Storage(外部存储)

  并不总是可用的,因为用户可以选择把这部分作为USB存储模式,这样就不可以访问了。
    是大家都可以访问的,因此保存到这里的文件是失去访问控制权限的。
    当用户卸载你的app时,系统仅仅会删除external根目录(getExternalFilesDir())下的相关文件。
    External是在你不需要严格的访问权限并且你希望这些文件能够被其他app所共享或者是允许用户通过电脑访问时的最佳存储区域。

  1.首先要检查状态

  1. /* Checks if external storage is available for read and write */
  2. public boolean isExternalStorageWritable() {
  3. String state = Environment.getExternalStorageState();
  4. if (Environment.MEDIA_MOUNTED.equals(state)) {
  5. return true;
  6. }
  7. return false;
  8. }
  9. /* Checks if external storage is available to at least read */
  10. public boolean isExternalStorageReadable() {
  11. String state = Environment.getExternalStorageState();
  12. if (Environment.MEDIA_MOUNTED.equals(state) ||
  13. Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
  14. return true;
  15. }
  16. return false;
  17. }

  2.外部私有存储

  1. File file3 = new File(getExternalCacheDir().getAbsolutePath(), "getExternalCacheDir.txt");
  2. try {
  3. OutputStream outputStream1 = new FileOutputStream(file3);
  4. outputStream1.write("getExternalCacheDir".getBytes());
  5. outputStream1.close();
  6. } catch (Exception e) {
  7. e.printStackTrace();
  8. }
  9. Log.d("TAG", "file3=" + file3);
  10. File file4 = new File(getExternalFilesDir(Environment.DIRECTORY_PICTURES), "getExternalFilesDir.txt");
  11. try {
  12. OutputStream outputStream1 = new FileOutputStream(file4);
  13. outputStream1.write("getExternalFilesDir".getBytes());
  14. outputStream1.close();
  15. } catch (Exception e) {
  16. e.printStackTrace();
  17. }

效果图

  

  3外部公共存储

  APP产生的文件不需要隐藏,即对用户是可见的,那么你可以把文件放在外部的公共存储文件下面

  1. Environment.getExternalStorageDirectory()
  2. Environment.getExternalStoragePublicDirectory()

APP的缓存文件放在哪里?的更多相关文章

  1. APP的缓存文件到底应该存在哪?看完这篇文章你应该就自己清楚了

    APP的缓存文件到底应该存在哪?看完这篇文章你应该就自己清楚了 彻底理解android中的内部存储与外部存储 存储在内部还是外部 所有的Android设备均有两个文件存储区域:"intern ...

  2. 【转】APP的缓存文件到底应该存在哪?看完这篇文章你应该就自己清楚了

    只要是需要进行联网获取数据的APP,那么不管是版本更新,还是图片缓存,都会在本地产生缓存文件.那么,这些缓存文件到底放在什地方合适呢?系统有没有给我们提供建议的缓存位置呢?不同的缓存位置有什么不同呢? ...

  3. Android储存

    Android储存一共5种方法 一: 手机内置,外部储存 1.获取本地存储 (Android的读写文件及权限设置) getFilesDir()   data/data/包名/File getCache ...

  4. 重新想象 Windows 8 Store Apps (28) - 选取器: CachedFileUpdater(缓存文件更新程序)

    原文:重新想象 Windows 8 Store Apps (28) - 选取器: CachedFileUpdater(缓存文件更新程序) [源码下载] 重新想象 Windows 8 Store App ...

  5. little kernel中如何决定app目录下应该包含哪个app

    lk中是会为每个app建立一个thread,所以的app都是放在app这个路径下,那是在哪里决定的呢?一般是通过在project下面的MODULE决定的,例如下面这个例子就只用app下面的aboot这 ...

  6. 外呼系统APP外呼软件手机电销软件拨号销售软件功能设计

    外呼系统APP外呼软件 1 系统概述 该软件系统设计功能主要为贷款.投资.资产管理等金融中介公司提供方便快捷的线上管理各类资源的一款应用软件工具. 可根据不同职位的账号登录APP来管理电话营销.客户签 ...

  7. 一个基于NodeJS开发的APP管理CMS系统

    花了大概3周独立开发了一个基于NodeJS的CMS系统,用于公司APP的内容管理( **公司APP?广告放在最后 ^_^ ** ,管理员请理解~~~ )晚上看了部电影还不想睡,闲着也是闲着就作下小小总 ...

  8. 微信下载app需要点击右上角在浏览器中打开下载的问题

    很多朋友是不是遇到过这样的问题,自家的app通过微信推广没办法直接下载,而是需要通过一个遮罩层来提示用户下载. 点击下载按钮提示点击右上角在浏览器中打开 这样的方式下载一个app是不是需要点击下载按钮 ...

  9. 跳蚤APP

    1.项目描述 我们致力于制作一款服务于校内师生的物品转让平台,在此平台上的用户可以发布要转让或欲购买的物品信息. 2.创新与收益 Need(需求) 如今在市场上有许多的二手交易线上平台,它们的服务范围 ...

随机推荐

  1. iOS UITableView中关于cell里的按钮被点击时如何确定是哪一个section

    在section=10:row=1:的UITableView中,每一个cell都带有一个按钮,例如如下的图片一样每一个cell中都有一个“进入店铺的按钮”,但是如果我点击相应的cell要进入对应的店铺 ...

  2. egret请求参数

    egret的文档还不错,不过http请求参数的文档居然没有,于是自己摸索了一下, 发现原来是直接传字符串参数就可以了.于是封装了一个类,方便使用. class RequestParam { publi ...

  3. 模板方法模式(Head first 设计模式——7)

    一.模板方法模式定义 模板方法模式:在一个方法中定义一个算法的骨架,而将一些步骤延迟到子类中.模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤. 从定义中,应该可以看出一部分,为 ...

  4. Required field 'client_protocol' is unset! Struct:TOpenSessionReq(client_protocol:null, configuration:{use:database=default}) (state=08S01,code=0)

    sparksql 2.和hive2.1.1 由于sparksql中的hive-cli 等包的版本是1.2的需要自己下载,下载替换之后不报错,替换之前做好备份

  5. UTF-8以字节为单位对Unicode进行编码

    UTF-8以字节为单位对Unicode进行编码.从Unicode到UTF-8的编码方式如下: Unicode编码(16进制) UTF-8 字节流(二进制) 000000 - 00007F 0xxxxx ...

  6. github搭建个人博客----------绑定域名访问

    首先你得有一个Github账号,没有的话去github.com注册一个账号,然后到达仓库信息填写界面: 创建仓库,如下图:(仓库名要以自己的github名作为前缀,后面的夹 .github.io) 后 ...

  7. Hibernate- 开发环境准备

    数据库:两张表,两者通过publisher_id构成关联关系. Book(图书表) CREATE TABLE `t_book` ( `id` int(11) NOT NULL AUTO_INCREME ...

  8. 篇三:XPath--解析Html

    导语:爬虫爬取的界面,大致分为静态界面.ajax异步加载.动态界面.静态界面直接获取HTML对象,然后使用XPath获取值 最有用的路径表达式: 表达式 描述 nodename 选取此节点的所有子节点 ...

  9. jquery动态分页

    最近一直研究jquery的分页效果,刚刚弄好了一个,拿出来与大家分享.分页效果与时光网的差不多. 网址:http://www.mtime.com/movie/news/all/ 先在aspx页面放置一 ...

  10. [oracle] oracle-ibatis-整理

    ① <!-- 复用sql代码 --> <sql id="CUSTOM_CABINET_INFO.QUERY_CABINET"> <dynamic pr ...