我有一个文件夹,其中包含一些我想在处理后删除的文件。这些文件的扩展名为.FIR
。经过一些谷歌搜索,我找到了一个我修改过的递归方法:
void delete(File f) throws IOException {
if (f.isDirectory()) {
for (File c : f.listFiles())
if(f.listFiles().toString().contains(".FIR"))
delete(c);
}
if (!f.delete())
throw new FileNotFoundException("Failed to delete file: " + f);
}
此函数将抛出IOException告诉我:
07-31 11:02:31.885: E/DELETE:(5694): Failed to delete file: /mnt/sdcard/ExtractedFiles
该文件夹已设置为RW
次操作。在我的清单文件中:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
我无法找到另一个听起来像MODIFY_FILES
有什么想法吗?
答案 0 :(得分:9)
试试这个:
void delete(File f) throws IOException {
if (f.isDirectory()) {
for (File c : f.listFiles()) {
delete(c);
}
} else if (f.getAbsolutePath().endsWith("FIR")) {
if (!f.delete()) {
new FileNotFoundException("Failed to delete file: " + f);
}
}
}
答案 1 :(得分:4)
更好地使用temp
个文件......
File f = File.createTempFile("pattern", ".suffix");
关闭应用程序后,首先关闭临时文件,然后删除。
有关详细信息,请参阅此链接:
http://www.roseindia.net/java/example/java/io/create-temp-file.shtml
答案 2 :(得分:2)
我认为问题在于:
if(f.listFiles().toString().contains(".FIR"))
将其更改为:
if(c.getName().contains(".FIR"))
并确保您的目录仅包含扩展名为 .FIR 的文件,否则(如果有其他扩展文件可用),它仍然无法删除非空目录
否则,请使用以下方法完成此操作:
private static boolean delete(File dir) {
if (dir != null && dir.isDirectory()) {
String[] children = dir.list();
for (int i = 0; i < children.length; i++) {
boolean success = delete(new File(dir, children[i]));
if (!success) {
return false;
}
}
}
return (dir.getName().contains(".FIR"))? dir.delete() : false;
}
答案 3 :(得分:1)
检查这个
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
答案 4 :(得分:0)
我正在使用此代码并且正在使用:
String root_sd = Environment.getExternalStorageDirectory().toString();
File file = new File(path) ;
File list[] = file.listFiles();
for(File f:list)
{
name = file.getName();
filestv.setText(f.getName());
//add new files name in the list
// delete.setText(name );
}
}
您可以按照完整的tutorials
进行操作