android中的文件存储分为SharedPreferences内部存储、外部存储、数据库存储
内部存储的files目录 /data/data/packageName/files android api获取路径的方式context.getFilesDir();
内部存储的data目录 /data android api获取路径的方式Environment.getDataDirectory();
外部存储的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);
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
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);