3

我有一个文件夹,其中包含一些我想在处理后删除的文件。这些文件具有扩展名.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

有任何想法吗?

4

5 回答 5

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);
        }
    }
}
于 2012-07-31T09:26:07.270 回答
4

Better use temp files....

File f = File.createTempFile("pattern", ".suffix");

Once the application is closed, the temp files are first closed then deleted.

See this link for more details:

http://www.roseindia.net/java/example/java/io/create-temp-file.shtml

于 2012-07-31T09:14:52.090 回答
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;
}
于 2012-07-31T09:15:05.893 回答
1

check this

<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>

于 2012-07-31T09:13:06.190 回答
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 );


      }  


}

你可以按照完整的教程

于 2015-06-17T01:50:27.467 回答