在外部存储上创建文件时有不同的例外

时间:2014-11-09 16:07:08

标签: java android file permissions android-external-storage

在非appliation特定文件夹中的外部存储上创建文件时,我收到了不同的崩溃。这段代码适用于大多数用户,但有些失败。我在创建文件时大致使用以下代码:

public static boolean isExternalStorageAvailable() {
    String state = Environment.getExternalStorageState();
    return (Environment.MEDIA_CHECKING.equals(state) || Environment.MEDIA_MOUNTED.equals(state));
}

public File getTargetDirectory() {
    File root = Environment.getExternalStorageDirectory();
    File directory = new File(root, "DIRECTORY");
    directory.mkdirs();
    return directory;
}

public static void createFile() {
    if (isExternalStorageAvailable()) {
        File file = new File(getTargetDirectory(), "filename.dat");
        if (file.exists())
            file.delete();
        file.createNewFile();
        //other code...
    }
}

我在AndroidManifest.xml中拥有以下权限:

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

我在执行java.io.IOException时收到不同的例外情况(包含在createNewFile()中):

libcore.io.ErrnoException: open failed: EACCES (Permission denied)
1   libcore.io.Posix.open   
2   libcore.io.BlockGuardOs.open    BlockGuardOs.java, line 110
3   java.io.File.createNewFile  File.java, line 941

libcore.io.ErrnoException: open failed: ENOENT (No such file or directory)
1   libcore.io.Posix.open   
2   libcore.io.BlockGuardOs.open    BlockGuardOs.java, line 110
3   java.io.File.createNewFile

这些例外发生在运行不同操作系统版本的不同Android设备上。此文件夹基本上是放在文件夹中,其中app正在写入数据以供用户传输到不同的设备。因此用户可以从他的PC复制该文件夹。

可能是某种只读权限问题吗?

0 个答案:

没有答案