我正在尝试在外部存储设备上写入文件,此代码在3周前正常运行,但是从最近4天起它停止工作,我不知道它怎么了。
以下是我的代码。
File exportDir = new File(Environment.getExternalStorageDirectory().getAbsolutePath(), "XXX");
// log(exportDir.exists() + " ?????");
// log(exportDir.mkdirs() + " ?????");
if (!exportDir.exists()) {
exportDir.mkdirs();
}
File file_path = new File(exportDir, "backuptask.db");
try {
file_path.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
FileOutputStream fos = new FileOutputStream(file_path.toString());
fos.write(array.toString().getBytes());
fos.close();
以及清单中设置的以下权限。
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
我已经要求运行时权限,并且此代码对于API> = 19正常工作,但是在API <19中引发以下错误。
/mnt/sdcard/XXX/backuptask.db:打开失败:EACCES(权限被拒绝) 11-13 17:20:47.776 4127-4158 / com.XXX.XXX W / System.err: java.io.FileNotFoundException:/mnt/sdcard/XXX/backuptask.db:打开 失败:EACCES(权限被拒绝)11-13 17:20:47.786 4127-4158 / com.XXX.XXX W / System.err:在 libcore.io.IoBridge.open(IoBridge.java:416) 在java.io.FileOutputStream。(FileOutputStream.java:88) 在com.Tasks.exportimporttasks.TaskBackup.startBackup(TaskBackup.java:133) 在com.Tasks.demoimportexport.RestoreBackup $ ExportDatabaseTask.doInBackground(RestoreBackup.java:272) 在com.Tasks.demoimportexport.RestoreBackup $ ExportDatabaseTask.doInBackground(RestoreBackup.java:259) 在android.os.AsyncTask $ 2.call(AsyncTask.java:287) 在java.util.concurrent.FutureTask.run(FutureTask.java:234) 在android.os.AsyncTask $ SerialExecutor $ 1.run(AsyncTask.java:230) 在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 在java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:573) 在java.lang.Thread.run(Thread.java:856) 导致原因:libcore.io.ErrnoException:打开失败:EACCES(权限被拒绝) 在libcore.io.Posix.open(本机方法) 在libcore.io.BlockGuardOs.open(BlockGuardOs.java:110) 在libcore.io.IoBridge.open(IoBridge.java:400) ...还有10个