从应用程序的私有存储中删除文件

时间:2013-12-02 10:33:13

标签: android file-io illegalargumentexception

当我尝试从/data/data/com.mycompany.appname/files/mydir/删除文件时,我遇到了问题。

我有以下代码:

class MyClass extends android.content.ContextWrapper;
//...
private void delete() {
    String file = getFilesDir() + "/" + (getString(R.string.directory_logs) + "/" + selectedLogFile).substring(1);
    file = file.replaceAll("/", File.separator);
    //here the value of file is:"/data/data/com.mycompany.appname/files/mydir/my_file.log"
    if (FileOperation.delete(file)) {
        //Do something if deleting was successfull
    }
}

FileOperation.delete()方法是:

public static boolean delete(String fileOrDirectory) {
    return delete(new File(fileOrDirectory));
}

public static boolean delete(File fileOrDirectory) {
    if (fileOrDirectory.isDirectory()) {
        for (File child : fileOrDirectory.listFiles()) {
            delete(child);
        }
    }
    return fileOrDirectory.delete();
}

FileOperation.delete()的答案总是错误的。

我尝试调用ContextWrapper.deleteFile(file)而不是我的删除方法,但它会抛出IllegalArgumentException并显示以下消息:

  

文件/data/data/com.mycompany.appname/files/mydir/my_file.log包含路径分隔符

你能帮我解决一下如何删除目录中的文件吗?

2 个答案:

答案 0 :(得分:0)

您可以尝试以下内容:

File x = new File(path_to_file);
if ( x.delete() ) ...

此外,您无需将“/”替换为文件分隔符。可以让它像“/”

一样

答案 1 :(得分:0)

这是一个奇怪的错误,但是

  • 只有root拥有删除此文件的权限
  • 当您通过更改重新安装应用时,此文件将被删除或重新创建

如果你有根电话,并非所有用户都有。