我一直在为在Galaxy S4的SD卡上存储ArrayList而苦苦挣扎。对于我似乎无法找出我自己的原因,我不断收到文件未发现异常在这段代码:Android SDK外部存储,找不到文件
File file = new File(Environment.getExternalStorageDirectory(), name);
if(file.exists()) file.delete();
try{
OutputStream os = new FileOutputStream(file);
OutputStreamWriter osw = new OutputStreamWriter(os);
for(int j = 0; j < fallList.size(); j++)
osw.write(fallList.get(j));
os.close();
osw.close();
} catch (FileNotFoundException e){
Toast.makeText(getApplicationContext(),"File Not Found",Toast.LENGTH_LONG).show();
e.printStackTrace();
}
编辑:
正确添加权限后,我不再得到文件未发现异常,但是发生IOException。我注意到在设备监视一些系统错误:
04-26 13:54:15.115:d/ViewRootImpl(27953):ViewPostImeInputStage ACTION_DOWN 04-26 13:54:20.130:d/ViewRootImpl(27953): ViewPostImeInputStage ACTION_DOWN 04-26 13:54:20.270:W/System.err的(27953):产生java.io.IOException:文件描述符关闭 04-26 13:54:20.280:W/System.err的(27953):在libcore.io.Posix.writeBytes(Native Method) 04-26 13:54:20.310:W/System.err(27953):at libcore.io.Posix.write(Posix.java:223) 04-26 13 :54:20.310:W/System.err(27953):在libcore.io.BlockGuardOs.write(BlockGuardOs.java:313) 04-26 13:54:20.310:W/System.err(27953):在libcore .io.IoBridge.write(IoBridge.java:497) 04-26 13:54:20.310:W/System.err(27953):在java.io.FileOutputStream.write(FileOutputStream.java:186) 04-26 13:54:20.310:W/System.err 27953):在java.io.OutputStreamWriter.flushBytes(OutputStreamWriter.java:167) 04-26 13:54:20.310:W/System.err的(27953):在java.io.OutputStreamWriter.close(OutputStreamWriter.java: 140) 04-26 13:54:20.310:W/System.err的(27953):在com.example.med603.sharedpreffalldetect.MainActivity.toFile(MainActivity.java:142) 04-26 13:54:20.310: W/System.err(27953):at com.example.med603.sharedpreffalldetect.MainActivity.access $ 000(MainActivity.java:35) 04-26 13:54:20.310:W/System.err(27953):at com .example.med603.sharedpreffalldetect.MainActivity $ 2.onClick(MainActivity.java:73) 04-26 13:54:20.310:W/System.err(27953):at android.view.View.performClick(View.ja va:5197) 04-26 13:54:20.310:W/System.err(27953):at android.view.View $ PerformClick.run(View.java:20926) 04-26 13:54:20.310: W/System.err(27953):at android.os.Handler.handleCallback(Handler.java:739) 04-26 13:54:20.310:W/System.err(27953):at android.os.Handler。 dispatchMessage(Handler.java:95) 04-26 13:54:20.310:W/System.err(27953):at android.os.Looper.loop(Looper.java:145) 04-26 13:54: 20.310:W/System.err(27953):at android.app.ActivityThread.main(ActivityThread.java:5951) 04-26 13:54:20.320:W/System.err(27953):at java.lang。 reflect.Method.invoke(Native Method) 04-26 13:54:20.320:W/System.err(27953):at java.lang.reflect.Method.invoke(Method.java:372) 04-26 13 :54:20.320:W/System.err(27953):at com.android.internal.os.ZygoteIni t $ MethodAndArgsCaller.run(ZygoteInit.java:1400) 04-26 13:54:20.320:W/System.err(27953):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1195)
我以前没有使用过d.log,所以我不完全知道我在寻找什么在这里。
+0
'Environment.getExternalStorageDirectory()'不会保证这将返回您的SD卡路径。检查外部安装的存储。在这里阅读更多http://developer.android.com/guide/topics/data/data-storage.html#filesExternal –
+0
您需要'WRITE_EXTERNAL_STORAGE'权限才能在那里写入。如果你认为你的设置正确,[我的这篇博客文章](https://commonsware.com/blog/2015/08/31/hey-where-did-my-permission-go.html)概述一些常见的原因,为什么你可能仍然没有这种权限。您也可以考虑编辑您的问题并发布您应该在LogCat中看到的Java堆栈跟踪。 –
+0
感谢您的链接伙计们。我会检查他们。 之后我会看到有关发布Java堆栈跟踪的信息! –