我尝试使用File.delete()
,但它无法工作。如何在SD卡上删除目录?
我正在处理Android 2.1。
WRITE_EXTERNAL_STORAGE
。
编辑:为方便起见,我在此处复制了代码,但它仍然来自上面的链接。public static boolean deleteDirectory(File path) {
if( path.exists() ) {
File[] files = path.listFiles();
if (files == null) {
return true;
}
for(int i=0; i<files.length; i++) {
if(files[i].isDirectory()) {
deleteDirectory(files[i]);
}
else {
files[i].delete();
}
}
}
return( path.delete() );
}
/geo1.xml
不在 SD 卡中,而是在根目录 (/
) 中。你确定你指向了正确的文件吗? - MByD/geo.xml
就在我试图删除的文件夹里面,但是我的代码中缺少一些东西。现在它可以正常工作了。谢谢 :) - Greenhorn在删除目录之前,必须确保目录为空。您需要递归地清空并删除树中所有目录:
boolean delete(File file) {
if (file.isDirectory()) {
File[] files = file.listFiles();
if (files != null)
for (File f : files) delete(f);
}
return file.delete();
}
更新:
看起来file.isDirectory() == (file.listFiles() == null)
,但是当file.isDirectory() == false
时,file.listFiles()
会记录“fail readDirectory() errno=20
”。
https://stackoverflow.com/a/16411911/2397275
uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
这对我来说很好用,希望对你也有帮助。
File dir = new File(Environment.getExternalStorageDirectory()+"DirName");
if (dir.isDirectory()) {
String[] children = dir.list();
for (int i = 0; i < children.length; i++) {
new File(dir, children[i]).delete();
}
}
对我有效:
Add in manifest-
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
private boolean deleteDirectory(File path) {
if( path.exists() ) {
File[] files = path.listFiles();
if (files == null) {
return false;
}
for(File file : files) {
if(file.isDirectory()) {
deleteDirectory(file);
}
else {
file.delete();
}
}
}
return path.exists()?path.delete():false;
}
boolean wasDeleted = file.delete();
替换 file.delete
,然后在下面调用 if (wasDeleted) {Log.i("Deleted ", "successfully");}
。我也同意使用 for each 循环 (for(File file : files)
) 而不是接受的答案 (for(int i=0; i<files.length; i++)
)。 - HB.