【问题标题】:Android SDK External Store, File Not FoundAndroid SDK 外部存储,未找到文件
【发布时间】:2016-04-26 11:16:45
【问题描述】:

我一直在努力将 ArrayList 存储在 Galaxy S4 的 SD 卡上。由于我自己似乎无法弄清楚的原因,我在这段代码中不断收到 File Not Found Exception:

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();
            } 

编辑:

正确添加权限后,我不再得到 File Not Found Exception,而是 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(本机方法) 04-26 13:54:20.310: W/System.err(27953): 在 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): 在 com.example.med603.sharedpreffalldetect.MainActivity.access$000(MainActivity.java:35) 04-26 13:54:20.310: W/System.err(27953): 在 com.example.med603.sharedpreffalldetect.MainActivity$2.onClick(MainActivity.java:73) 04-26 13:54:20.310: W/System.err(27953): 在 android.view.View.performClick(View.java:5197) 04-26 13:54:20.310: W/System.err(27953): 在 android.view.View$PerformClick.run(View.java:20926) 04-26 13:54:20.310: W/System.err(27953): 在 android.os.Handler.handleCallback(Handler.java:739) 04-26 13:54:20.310: W/System.err(27953): 在 android.os.Handler.dispatchMessage(Handler.java:95) 04-26 13:54:20.310: W/System.err(27953): 在 android.os.Looper.loop(Looper.java:145) 04-26 13:54:20.310: W/System.err(27953): 在 android.app.ActivityThread.main(ActivityThread.java:5951) 04-26 13:54:20.320: W/System.err(27953): 在 java.lang.reflect.Method.invoke(Native Method) 04-26 13:54:20.320: W/System.err(27953): 在 java.lang.reflect.Method.invoke(Method.java:372) 04-26 13:54:20.320: W/System.err(27953): 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1400) 04-26 13:54:20.320: W/System.err(27953): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1195)

我以前没有使用过 d.log,所以我不完全确定我在这里看到的是什么。

【问题讨论】:

  • Environment.getExternalStorageDirectory() 永远不会保证这将返回您的 sdcard 路径。检查外部安装的存储。在此处阅读更多信息developer.android.com/guide/topics/data/…
  • 您需要WRITE_EXTERNAL_STORAGE 权限才能在此处写入。如果您认为您已正确设置,this blog post of mine 概述了您可能仍然没有此权限的一些常见原因。您还可以考虑编辑您的问题并发布您应该在 LogCat 中看到的 Java 堆栈跟踪。
  • 感谢您的链接。我会检查出来的。稍后我会看到有关发布 Java 堆栈跟踪的信息!

标签: java android ioexception android-external-storage


【解决方案1】:
  1. 在 AndroidManifest.xml 中检查您的权限。您需要对外部存储具有 READ & WRITE 权限。
  2. 尝试使用不同的目录。例如,getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)

【讨论】:

  • 感谢您的快速回复。我在清单中确实具有读写权限,起初我尝试将数据存储在 Environment.DIRECTORY_DOCUMENTS 中 - 也得到文件未找到异常。
【解决方案2】:

所以我想通了;首先,当我“重做”应用程序时,我忘记了权限(第一次尝试太混乱了)——这解决了 File Not Found Exception!

然后我得到一个 IOException,这似乎是因为我没有刷新 OutputStreamWriter。

【讨论】:

    猜你喜欢
    • 2013-10-13
    • 2021-04-14
    • 1970-01-01
    • 2011-12-14
    • 2021-06-19
    • 1970-01-01
    • 1970-01-01
    • 2021-01-12
    • 2023-03-22
    相关资源
    最近更新 更多