android中的檔案存儲分為SharedPreferences内部存儲、外部存儲、資料庫存儲
SharedPreferences
sharedPreferences在使用時有三種方式 通過Activity的Context對象擷取 SharedPreferences對象的擷取 getSharedPreferences("檔案名",模式); 得到檔案名:檔案名xml 通過Activity的Context擷取 SharedPreferences對象擷取 getPreferences(模式); 得到檔案名: XXXActivity.xml 同PreferenceManager SharedPreferences對象的擷取 preferenceManager.getDefaultSharedPreferences(上下文); 得到packageName_prefer
寫入資料 sharedPreferences對象的edit()方法得到editor對象, 使用editor的putXXX(key,value); editoe對象的commit送出資料 讀取資料 sharedPreference對象的getXXX()
android的内部存儲(不需要權限)
内部存儲的cache目錄 /data/data/packageName/cache android api擷取路徑的方式context.getCacheDir()
内部存儲的files目錄 /data/data/packageName/files android api擷取路徑的方式context.getFilesDir();
内部存儲的data目錄 /data android api擷取路徑的方式Environment.getDataDirectory();
android的外部存儲
外部存儲的cache目錄/storage/sdcard0/Android/data/packageName/cache android api擷取路徑的方發context.getExternalCacheDir()
外部存儲的files目錄 /storage/sdcard0/Android/data/packageName/files android api擷取路徑的方式context.getExternalFilesDir()
外部存儲的sdcard的根目錄/storage/sdcard0/ android api擷取路徑的方式Environemnt.getExternalStorageDirectory()
外部存儲的九大目錄 /storage/sdcard0/Alarms android api擷取路徑的方式Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_ALARMS);
/storage/sdcard0/DCIMandroid api擷取路徑的方式Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);
/storage/sdcard0/Downloadandroid api擷取路徑的方式Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
/storage/sdcard0/Movicesandroid api擷取路徑的方式Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVICES);
/storage/sdcard0/Musicandroid api擷取路徑的方式Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC);
/storage/sdcard0/Notificationsandroid api擷取路徑的方式Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_NOTIFICATIONS);
/storage/sdcard0/Picturesandroid api擷取路徑的方式Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
/storage/sdcard0/Podcastsandroid api擷取路徑的方式Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PODCASTS);
/storage/sdcard0/Ringtones android api擷取路徑的方式Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_RINGTONES);
擷取SDCard的大小(每塊的大小*塊數)
//每塊的大小
long blockSize = sf.getBlockSize(); //方法過時,在4.3以上的手機可以用getBlockSizeLong();代替
//總的塊的個數
long blockCount=sf.getBlockCount(); //方法過時,在4.3以上的手機可以用getBlockBlockCountLong();代替
//可用的塊的個數
long availableCount=sf.getAvailableBlocks(); //方法過時,在4.3以上的手機可以用getAvailableBlocksLong();代替
//空閑塊的個數(包括預留的一般程式無法使用的塊)
long freeCount=sf.getFreeBlocks(); //方法過時,在4.3以上的手機可以用getFreeBlocksLong();代替
總的大小:blockSize*blockCount/1024/1024 MB
可用大小:blockSize*availableCount/1024/1024 MB
已用空間大小: 總的大小-可用空間
測試代碼:
Log.i("123", this.getCacheDir().getPath());
Log.i("123", this.getFilesDir().getPath());
Log.i("123", Environment.getDataDirectory().getPath());
//Log.i("123", Environment.getRootDirectory().getPath());
Log.i("123", this.getExternalCacheDir().getPath());
Log.i("123", this.getExternalFilesDir(null).getPath());
Log.i("123", Environment.getExternalStorageDirectory().getPath());
Log.i("123", Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_ALARMS).getPath());
Log.i("123", Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getPath());
Log.i("123", Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getPath());
Log.i("123", Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MOVIES).getPath());
Log.i("123", Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_NOTIFICATIONS).getPath());
Log.i("123", Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getPath());
Log.i("123", Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PODCASTS).getPath());
Log.i("123", Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_RINGTONES).getPath());
StatFs sf=new StatFs(Environment.getExternalStorageDirectory().getPath());
//每塊的大小
long blockSize = sf.getBlockSize();
//總的塊的個數
long blockCount=sf.getBlockCount();
//可用的塊的個數
long availableCount=sf.getAvailableBlocks();
//空閑塊的個數
long freeCount=sf.getFreeBlocks();
Log.i("123", "總的大小"+(blockSize*blockCount/1024/1024));
Log.i("123", "可用大小"+(blockSize*availableCount/1024/1024));
Log.i("123", "已用的大小"+((blockSize*blockCount)-(blockSize*availableCount))/1024/1024);