getCacheDir()、getFilesDir()、getExternalFilesDir()、getExternalCacheDir(),mediacachefiles

來源:互聯網
上載者:User

getCacheDir()、getFilesDir()、getExternalFilesDir()、getExternalCacheDir(),mediacachefiles
一.getCacheDir、getCacheDir

getCacheDir()方法用於擷取/data/data//cache目錄 
getFilesDir()方法用於擷取/data/data//files目錄

 

二.getExternalFilesDir、getExternalCacheDir

 

  應用程式在啟動並執行過程中如果需要向手機上儲存資料,一般是把資料儲存在SDcard中的。大部分應用是直接在SDCard的根目錄下建立一個檔案夾,然後把資料儲存在該檔案夾中。這樣當該應用被卸載後,這些資料還保留在SDCard中,留下了垃圾資料。如果你想讓你的應用被卸載後,與該應用相關的資料也清除掉,該怎麼辦呢?

 

  通過Context.getExternalFilesDir()方法可以擷取到 SDCard/Android/data/你的應用的包名/files/ 目錄,一般放一些長時間儲存的資料 
通過Context.getExternalCacheDir()方法可以擷取到 SDCard/Android/data/你的應用程式套件名/cache/目錄,一般存放臨時快取資料.如果使用上面的方法,當你的應用在被使用者卸載後,SDCard/Android/data/你的應用的包名/ 這個目錄下的所有檔案都會被刪除,不會留下垃圾資訊。

 

  而且上面二個目錄分別對應 設定->應用->應用詳情裡面的”清除資料“與”清除緩衝“選項 
如果要儲存下載的內容,就不要放在以上目錄下

 

  較優秀的程式都會專門寫一個方法來擷取緩衝地址,如下所示:

 

public String getDiskCacheDir(Context context) {      String cachePath = null;      if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())              || !Environment.isExternalStorageRemovable()) {          cachePath = context.getExternalCacheDir().getPath();      } else {          cachePath = context.getCacheDir().getPath();      }      return cachePath;  }  

 

可以看到,當SD卡存在或者SD卡不可被移除的時候,就調用getExternalCacheDir()方法來擷取緩衝路徑,否則就調用getCacheDir()方法來擷取緩衝路徑。前者擷取到的就是 /sdcard/Android/data//cache 這個路徑,而後者擷取到的是 /data/data//cache 這個路徑。 
  注意:這兩種方式的緩衝都會在卸載app的時候被系統清理到,而開發人員自己在sd卡上建立的快取檔案夾,是不會跟隨著app的卸載而被清除掉的。

 

三.Android開發:filePath放在哪個檔案夾
Environment.getDataDirectory() = /dataEnvironment.getDownloadCacheDirectory() = /cacheEnvironment.getExternalStorageDirectory() = /mnt/sdcardEnvironment.getExternalStoragePublicDirectory(“test”) = /mnt/sdcard/testEnvironment.getRootDirectory() = /systemgetPackageCodePath() = /data/app/com.my.app-1.apkgetPackageResourcePath() = /data/app/com.my.app-1.apkgetCacheDir() = /data/data/com.my.app/cachegetDatabasePath(“test”) = /data/data/com.my.app/databases/testgetDir(“test”, Context.MODE_PRIVATE) = /data/data/com.my.app/app_testgetExternalCacheDir() = /mnt/sdcard/Android/data/com.my.app/cachegetExternalFilesDir(“test”) = /mnt/sdcard/Android/data/com.my.app/files/testgetExternalFilesDir(null) = /mnt/sdcard/Android/data/com.my.app/filesgetFilesDir() = /data/data/com.my.app/files

轉載於:http://blog.csdn.net/a910626/article/details/51470866

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.