我有一个包含大量文件的目录。我想删除整个目录以及其中的所有文件。
我希望我的代码等到该目录中的每个文件(包括目录本身)在执行下一个命令之前被删除。
我如何等待? 我的代码是
public void wipeMemoryCard()
{
File deleteMatchingFile = new File(Environment
.getExternalStorageDirectory().toString());
try {
filenames = deleteMatchingFile.listFiles();
if (filenames != null && filenames.length > 0)
{
content = true;
for (File tempFile : filenames)
{
if (tempFile.isDirectory())
{
wipeDirectory(tempFile.toString());
tempFile.delete();
}
else
{
File file = new File(tempFile.getAbsolutePath());
file.delete();
}
}
}
else
{
deleteMatchingFile.delete();
Toast("No files to Delete");
}
}
catch (Exception e)
{
e.printStackTrace();
}
if(content == true)
{
if (filenames == null && filenames.length == 0)
{
Toast("Files Deleted");
}
}
}
private static void wipeDirectory(String name) {
File directoryFile = new File(name);
File[] filenames = directoryFile.listFiles();
if (filenames != null && filenames.length > 0)
{
for (File tempFile : filenames)
{
if (tempFile.isDirectory())
{
wipeDirectory(tempFile.toString());
tempFile.delete();
}
else
{
File file = new File(tempFile.getAbsolutePath());
file.delete();
}
}
} else
{
directoryFile.delete();
}
}
答案 0 :(得分:10)
您不应该在UI线程上运行它。如果文件删除时间过长,系统将弹出“应用程序无响应”错误。您可以使用AsyncTask执行此操作。文档显示了一种简单的方法,可以使用它来弹出“请稍候”对话框,在后台执行耗时的工作,然后关闭对话框。
P.S。你的方法名字有点吓人! :)
答案 1 :(得分:1)
您应该使用处理程序,这样当所有文件都被删除时,它会向处理程序发送消息给您要执行的下一个任务。
请参阅此链接以获取处理程序..
http://www.tutorialforandroid.com/2009/01/using-handler-in-android.html
希望你问这个......
答案 2 :(得分:0)
public static void DeleteRecursive(String filename) {
File file = new File(filename);
if (!file.exists())
return;
if (!file.isDirectory()) {
file.delete();
return;
}
String[] files = file.list();
for (int i = 0; i < files.length; i++) {
DeleteRecursive(filename + "/" + files[i]);
}
file.delete();
}