1.文件位置
系統(tǒng)文件(注:這個是系統(tǒng)的文件系統(tǒng)肖爵,不允許修改的)
內(nèi)置SD卡(注:現(xiàn)在的手機基本上都有,就是我們所謂的ROM臀脏,是不可以移除的劝堪,RAM是我們手機的運行內(nèi)存)
外置SD卡(注:這個就是我們的SD卡了,可以移除)
2.文件儲存類型
file-普通的文件存儲
database-數(shù)據(jù)庫文件(.db文件)
sharedPreference-配置數(shù)據(jù)(.xml文件)
cache-圖片緩存文件
3.應用內(nèi)數(shù)據(jù)的所有路徑:
/data/data/com.xxx.xxx/cache - 應用內(nèi)緩存(注:對應方法getCacheDir())
/data/data/com.xxx.xxx/databases - 應用內(nèi)數(shù)據(jù)庫
/data/data/com.xxx.xxx/shared_prefs - 應用內(nèi)配置文件
/data/data/com.xxx.xxx/files - 應用內(nèi)文件(注:對應方法getFilesDir())
4.獲取文件路徑:
獲取SD卡根目錄:Environment.getExternalStorageDirectory().getAbsolutePath();
獲取外部Cache路徑:/mnt/sdcard/android/data/com.xxx.xxx/cache 一般存儲緩存數(shù)據(jù)(注:通過getExternalCacheDir()獲热嘀伞)
獲取外部File路徑:/mnt/sdcard/android/data/com.xxx.xxx/files 存儲長時間存在的數(shù)據(jù) (注:通過getExternalFilesDir(String type)獲取秒啦, type為特定類型,可以是以下任何一種
Environment.DIRECTORY_MUSIC,?
Environment.DIRECTORY_PODCASTS,?
Environment.DIRECTORY_RINGTONES,
?Environment.DIRECTORY_ALARMS,
?Environment.DIRECTORY_NOTIFICATIONS,?
Environment.DIRECTORY_PICTURES,?
?Environment.DIRECTORY_MOVIES. )
5.工具類:(使用時直接調(diào)用對應方法即可)
/*??*?文?件?名:??DataCleanManager.java??
?*?*?描????述:??主要功能有清除內(nèi)/外緩存搀玖,清除數(shù)據(jù)庫余境,清除sharedPreference,清除files和清除自定義目錄??
?*?*/??
import?java.io.File;??
import?java.math.BigDecimal; ?
import?android.content.Context;??
import?android.os.Environment;??
import?android.text.TextUtils; ?
/**?*?本應用數(shù)據(jù)清除管理器?*/??
public?class?DataCleanManager?{??
/**
?????*?*?清除本應用內(nèi)部緩存(/data/data/com.xxx.xxx/cache)?*?*
?????*?
?????*?@param?context
?????*/??
public?static?void?cleanInternalCache(Context?context)?{??
????????deleteFilesByDirectory(context.getCacheDir());??
????}??
/**
?????*?*?清除本應用所有數(shù)據(jù)庫(/data/data/com.xxx.xxx/databases)?*?*
?????*?
?????*?@param?context
?????*/??
public?static?void?cleanDatabases(Context?context)?{??
deleteFilesByDirectory(new?File("/data/data/"??
+?context.getPackageName()?+"/databases"));??
????}??
/**
?????*?*?清除本應用SharedPreference(/data/data/com.xxx.xxx/shared_prefs)?*
?????*?
?????*?@param?context
?????*/??
public?static?void?cleanSharedPreference(Context?context)?{??
deleteFilesByDirectory(new?File("/data/data/"??
+?context.getPackageName()?+"/shared_prefs"));??
????}??
/**
?????*?*?按名字清除本應用數(shù)據(jù)庫?*?*
?????*?
?????*?@param?context
?????*?@param?dbName
?????*/??
public?static?void?cleanDatabaseByName(Context?context,?String?dbName)?{??
????????context.deleteDatabase(dbName);??
????}??
/**
?????*?*?清除/data/data/com.xxx.xxx/files下的內(nèi)容?*?*
?????*?
?????*?@param?context
?????*/??
public?static?void?cleanFiles(Context?context)?{??
????????deleteFilesByDirectory(context.getFilesDir());??
????}??
/**
?????*?*?清除外部cache下的內(nèi)容(/mnt/sdcard/android/data/com.xxx.xxx/cache)
?????*?
?????*?@param?context
?????*/??
public?static?void?cleanExternalCache(Context?context)?{??
if?(Environment.getExternalStorageState().equals(??
????????????????Environment.MEDIA_MOUNTED))?{??
????????????deleteFilesByDirectory(context.getExternalCacheDir());??
????????}??
????}??
/**
?????*?*?清除自定義路徑下的文件灌诅,使用需小心芳来,請不要誤刪。而且只支持目錄下的文件刪除?*?*
?????*?
?????*?@param?filePath
?????*?*/??
public?static?void?cleanCustomCache(String?filePath)?{??
deleteFilesByDirectory(new?File(filePath));??
????}??
/**
?????*?*?清除本應用所有的數(shù)據(jù)?*?*
?????*?
?????*?@param?context
?????*?@param?filepath
?????*/??
public?static?void?cleanApplicationData(Context?context,?String...?filepath)?{??
????????cleanInternalCache(context);??
????????cleanExternalCache(context);??
????????cleanDatabases(context);??
????????cleanSharedPreference(context);??
????????cleanFiles(context);??
if?(filepath?==?null)?{??
return;??
????????}??
for?(String?filePath?:?filepath)?{??
????????????cleanCustomCache(filePath);??
????????}??
????}??
/**
?????*?*?刪除方法?這里只會刪除某個文件夾下的文件猜拾,如果傳入的directory是個文件即舌,將不做處理?*?*
?????*?
?????*?@param?directory
?????*/??
private?static?void?deleteFilesByDirectory(File?directory)?{??
if?(directory?!=?null?&&?directory.exists()?&&?directory.isDirectory())?{??
for?(File?item?:?directory.listFiles())?{??
????????????????item.delete();??
????????????}??
????????}??
????}??
//?獲取文件??
//Context.getExternalFilesDir()?-->?SDCard/Android/data/你的應用的包名/files/?目錄,一般放一些長時間保存的數(shù)據(jù)??
//Context.getExternalCacheDir()?-->?SDCard/Android/data/你的應用包名/cache/目錄挎袜,一般存放臨時緩存數(shù)據(jù)??
public?static?long?getFolderSize(File?file)?throws?Exception?{??
long?size?=?0;??
try?{??
????????????File[]?fileList?=?file.listFiles();??
for?(int?i?=?0;?i?<?fileList.length;?i++)?{??
//?如果下面還有文件??
if?(fileList[i].isDirectory())?{??
????????????????????size?=?size?+?getFolderSize(fileList[i]);??
}else?{??
????????????????????size?=?size?+?fileList[i].length();??
????????????????}??
????????????}??
}catch?(Exception?e)?{??
????????????e.printStackTrace();??
????????}??
return?size;??
????}??
/**
?????*?刪除指定目錄下文件及目錄
?????*?
?????*?@param?deleteThisPath
?????*?@param?filepath
?????*?@return
?????*/??
public?static?void?deleteFolderFile(String?filePath,?boolean?deleteThisPath)?{??
if?(!TextUtils.isEmpty(filePath))?{??
try?{??
File?file?=new?File(filePath);??
if?(file.isDirectory())?{//?如果下面還有文件??
????????????????????File?files[]?=?file.listFiles();??
for?(int?i?=?0;?i?<?files.length;?i++)?{??
deleteFolderFile(files[i].getAbsolutePath(),true);??
????????????????????}??
????????????????}??
if?(deleteThisPath)?{??
if?(!file.isDirectory())?{//?如果是文件顽聂,刪除??
????????????????????????file.delete();??
}else?{//?目錄??
if?(file.listFiles().length?==?0)?{//?目錄下沒有文件或者目錄肥惭,刪除??
????????????????????????????file.delete();??
????????????????????????}??
????????????????????}??
????????????????}??
}catch?(Exception?e)?{??
//?TODO?Auto-generated?catch?block??
????????????????e.printStackTrace();??
????????????}??
????????}??
????}??
/**
?????*?格式化單位
?????*?
?????*?@param?size
?????*?@return
?????*/??
public?static?String?getFormatSize(double?size)?{??
double?kiloByte?=?size?/?1024;??
if?(kiloByte?<?1)?{??
return?size?+?"Byte";??
????????}??
double?megaByte?=?kiloByte?/?1024;??
if?(megaByte?<?1)?{??
BigDecimal?result1?=new?BigDecimal(Double.toString(kiloByte));??
return?result1.setScale(2,?BigDecimal.ROUND_HALF_UP)??
.toPlainString()?+"KB";??
????????}??
double?gigaByte?=?megaByte?/?1024;??
if?(gigaByte?<?1)?{??
BigDecimal?result2?=new?BigDecimal(Double.toString(megaByte));??
return?result2.setScale(2,?BigDecimal.ROUND_HALF_UP)??
.toPlainString()?+"MB";??
????????}??
double?teraBytes?=?gigaByte?/?1024;??
if?(teraBytes?<?1)?{??
BigDecimal?result3?=new?BigDecimal(Double.toString(gigaByte));??
return?result3.setScale(2,?BigDecimal.ROUND_HALF_UP)??
.toPlainString()?+"GB";??
????????}??
BigDecimal?result4?=new?BigDecimal(teraBytes);??
return?result4.setScale(2,?BigDecimal.ROUND_HALF_UP).toPlainString()??
+"TB";??
????} ?
/**
? ? *獲取文件大小
*/
public?static?String?getCacheSize(File?file)?throws?Exception?{??
return?getFormatSize(getFolderSize(file));??
????} ?
} ?