在非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复制该文件夹。
可能是某种只读权限问题吗?