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() 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM