本文涉及刪除文件的方法摘自https://blog.csdn.net/chaoyu168/article/details/56021339
這是個不錯的刪除文件工具類隧膘。
在做log日志本地存儲掺出,上傳后刪除的需求時遇到過這個問題闲坎。
這是Android本身的一個Bug殉农,產(chǎn)生的原因是Android在刪除文件后沒有及時釋放文件鎖定罢,導(dǎo)致你在重新創(chuàng)建相同文件名的文件時吼鱼,該文件仍然處于被某一進(jìn)程占用的狀態(tài)韩脑。
例如你創(chuàng)建了A文件劫谅,然后某種時機(jī)你會把它進(jìn)行一系列操作之后刪掉见坑,并且重新創(chuàng)建A文件。那就會報這個錯誤捏检。
解決方案也很簡單荞驴,就是你再刪除A文件的時候,給A文件重新命名后再刪掉就OK了贯城。
File ATempFile = new File(AFile.getAbsolutePath() +
System.currentTimeMillis() + random.nextInt(100));
AFile.renameTo(ATempFile);
ATempFile.delete();
如果你發(fā)現(xiàn)用該方法并沒什么作用熊楼,還是報錯的時候。你就要注意了冤狡,是不是不止是你的文件名刪除和創(chuàng)建的一模一樣孙蒙,你還得看你外層的文件夾名稱,你刪除的文件夾名稱和你新創(chuàng)建的文件夾的名稱是否一致悲雳。
例如你的ADir文件夾挎峦,刪除之后再重建了,也是會報這樣的錯誤的合瓢。
所以這個時候我們應(yīng)該這樣做:
File ATempDir = new File(ADir.getAbsolutePath() +
System.currentTimeMillis() + random.nextInt(100));
ADir.renameTo(ATempDir);
deleteDirectory(ATempDir.getAbsolutePath());
下面附上刪除文件夾的方法:
public static boolean deleteDirectory(String filePath) {
if (TextUtils.isEmpty(filePath)) {
return false;
}
File dirFile = new File(filePath);
// 如果dir對應(yīng)的文件不存在坦胶,或者不是一個目錄,則退出
if ((!dirFile.exists()) || (!dirFile.isDirectory())) {
System.out.println("刪除目錄失斍缧ā:" + filePath + "不存在顿苇!");
return false;
}
boolean flag = true;
// 刪除文件夾中的所有文件包括子目錄
File[] files = dirFile.listFiles();
for (int i = 0; i < files.length; i++) {
// 刪除子文件
if (files[i].isFile()) {
flag = deleteFile(files[i].getAbsolutePath());
if (!flag)
break;
}
// 刪除子目錄
else if (files[i].isDirectory()) {
flag = deleteDirectory(files[i].getAbsolutePath());
if (!flag)
break;
}
}
if (!flag) {
System.out.println("刪除目錄失敗税弃!");
return false;
}
// 刪除當(dāng)前目錄
if (dirFile.delete()) {
System.out.println("刪除目錄" + filePath + "成功纪岁!");
return true;
} else {
System.out.println("刪除目錄失敗则果!");
return false;
}
}
刪除文件的方法:
/**
* 刪除單個文件
*/
public static boolean deleteFile(String filePath) {
if (TextUtils.isEmpty(filePath)) {
return false;
}
File file = new File(filePath);
if (file != null && file.exists()) {
file.delete();
return true;
}
return false;
}