【发布时间】:2017-11-30 16:12:12
【问题描述】:
我正在尝试将数据保存在外部存储中。但我得到一个 FileNotFoundException。
我在网上查找并在 Manifest 中包含了所需的权限并通过“mkdirs()”创建了该文件夹我正在模拟器上对其进行测试 - Nexus 6 API 23。
你能建议我哪里做错了吗?
@Override
public void saveExternalPublic(String data) {
File folder = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
File myFile = new File(folder, "myData4.txt");
folder.mkdirs();
writeData(myFile, data);
}
@Override
public void writeData(File myFile, String data) {
FileOutputStream fileOutputStream = null;
try {
fileOutputStream = new FileOutputStream(myFile);
fileOutputStream.write(data.getBytes());
cacheSaveView.showMessage(data + " was written successfully "+ myFile.getAbsolutePath());
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
finally {
if(null != fileOutputStream) {
try {
fileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
错误日志
11-30 00:51:43.178 23490-23490/com.example.rao.cachingsample W/System.err: java.io.FileNotFoundException: /storage/emulated/0/Download/myData4.txt: open failed: EACCES (Permission denied)
11-30 00:51:43.180 23490-23490/com.example.rao.cachingsample W/System.err: at libcore.io.IoBridge.open(IoBridge.java:452)
11-30 00:51:43.180 23490-23490/com.example.rao.cachingsample W/System.err: at java.io.FileOutputStream.<init>(FileOutputStream.java:87)
11-30 00:51:43.180 23490-23490/com.example.rao.cachingsample W/System.err: at java.io.FileOutputStream.<init>(FileOutputStream.java:72)
11-30 00:51:43.181 23490-23490/com.example.rao.cachingsample W/System.err: at com.example.rao.cachingsample.Caching.Presenter.CacheSavePresenterImpl.writeData(CacheSavePresenterImpl.java:60)
11-30 00:51:43.181 23490-23490/com.example.rao.cachingsample W/System.err: at com.example.rao.cachingsample.Caching.Presenter.CacheSavePresenterImpl.saveExternalPublic(CacheSavePresenterImpl.java:53)
11-30 00:51:43.181 23490-23490/com.example.rao.cachingsample W/System.err: at com.example.rao.cachingsample.Caching.View.FCacheSave.saveExternalPublic(FCacheSave.java:82)
11-30 00:51:43.181 23490-23490/com.example.rao.cachingsample W/System.err: at com.example.rao.cachingsample.Caching.View.FCacheSave_ViewBinding$4.doClick(FCacheSave_ViewBinding.java:63)
11-30 00:51:43.182 23490-23490/com.example.rao.cachingsample W/System.err: at butterknife.internal.DebouncingOnClickListener.onClick(DebouncingOnClickListener.java:22)
11-30 00:51:43.182 23490-23490/com.example.rao.cachingsample W/System.err: at android.view.View.performClick(View.java:5198)
11-30 00:51:43.183 23490-23490/com.example.rao.cachingsample W/System.err: at android.view.View$PerformClick.run(View.java:21147)
11-30 00:51:43.184 23490-23490/com.example.rao.cachingsample W/System.err: at android.os.Handler.handleCallback(Handler.java:739)
11-30 00:51:43.185 23490-23490/com.example.rao.cachingsample W/System.err: at android.os.Handler.dispatchMessage(Handler.java:95)
11-30 00:51:43.185 23490-23490/com.example.rao.cachingsample W/System.err: at android.os.Looper.loop(Looper.java:148)
11-30 00:51:43.185 23490-23490/com.example.rao.cachingsample W/System.err: at android.app.ActivityThread.main(ActivityThread.java:5417)
11-30 00:51:43.192 23490-23490/com.example.rao.cachingsample W/System.err: at java.lang.reflect.Method.invoke(Native Method)
11-30 00:51:43.193 23490-23490/com.example.rao.cachingsample W/System.err: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
11-30 00:51:43.198 23490-23490/com.example.rao.cachingsample W/System.err: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
11-30 00:51:43.199 23490-23490/com.example.rao.cachingsample W/System.err: Caused by: android.system.ErrnoException: open failed: EACCES (Permission denied)
11-30 00:51:43.211 23490-23490/com.example.rao.cachingsample W/System.err: at libcore.io.Posix.open(Native Method)
11-30 00:51:43.215 23490-23490/com.example.rao.cachingsample W/System.err: at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186)
11-30 00:51:43.216 23490-23490/com.example.rao.cachingsample W/System.err: at libcore.io.IoBridge.open(IoBridge.java:438)
【问题讨论】:
-
您在清单中的何处声明了您的权限?
-
你请求运行时权限了吗?
-
我没有在运行时询问权限。好的,我会这样做的。
标签: android caching filenotfoundexception android-external-storage