zoukankan      html  css  js  c++  java
  • APP的缓存文件放在哪里?

    只要是需要进行联网获取数据的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.   
    4.         try {  
    5.             OutputStream outputStream1 = new FileOutputStream(file1);  
    6.             outputStream1.write("file".getBytes());  
    7.             outputStream1.close();  
    8.         } catch (Exception e) {  
    9.             e.printStackTrace();  
    10.         } 

      运行结果

      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.   
    10. /* Checks if external storage is available to at least read */  
    11. public boolean isExternalStorageReadable() {  
    12.     String state = Environment.getExternalStorageState();  
    13.     if (Environment.MEDIA_MOUNTED.equals(state) ||  
    14.         Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {  
    15.         return true;  
    16.     }  
    17.     return false;  

      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.   
    10.         Log.d("TAG", "file3=" + file3);  
    11.   
    12.         File file4 = new File(getExternalFilesDir(Environment.DIRECTORY_PICTURES), "getExternalFilesDir.txt");  
    13.         try {  
    14.             OutputStream outputStream1 = new FileOutputStream(file4);  
    15.             outputStream1.write("getExternalFilesDir".getBytes());  
    16.             outputStream1.close();  
    17.         } catch (Exception e) {  
    18.             e.printStackTrace();  
    19.         } 

    效果图

      

       3外部公共存储

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

    1. Environment.getExternalStorageDirectory()   
    2. Environment.getExternalStoragePublicDirectory() 
  • 相关阅读:
    反射 Reflect Modifier 修饰符工具类
    【泛型】Generic 参数化类型 类型转换
    泛型 Generic 类型擦除引起的问题及解决方法
    注解 Annotation 简介 总结 MD
    反射 Reflect Class 基础 API MD
    【Type】类型 ParameterizedType
    Java中浮点类型的精度问题 double float
    jQuery之$.ajax()方法详解及实例
    pace.js – 加载进度条插件
    在线代码编辑、保存与运行网址推荐
  • 原文地址:https://www.cnblogs.com/dubo-/p/6632631.html
Copyright © 2011-2022 走看看