FileOutputStream找不到任何文件

时间:2015-02-10 20:32:21

标签: android

这并没有给出任何错误,但我不能在SD卡中找到任何文件。 我做错了什么?

      File photo=
          new File(Environment.getExternalStorageDirectory(),
                   "photo.jpg");

      if (photo.exists()) {
        photo.delete();
      }

      try {
        FileOutputStream fos = new FileOutputStream(photo.getPath());

        fos.write(jpeg[0]);
        fos.close();
      }
      catch (java.io.IOException e) {
        Log.e("PictureDemo", "Exception in photoCallback", e);
      }

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />

2 个答案:

答案 0 :(得分:1)

在DDMS和 adb shell ls 中,默认情况下,外部存储空间为/mnt/shell/emulated/0/

要让文件更快地显示在文件管理员等其他工具中,您应该在getFD().sync()FileOutputStream来电之间的flush()上致电close(),然后使用MediaScannerConnection及其scanFile()方法让MediaStore了解您的新文件。

并且,请删除android.permission.WRITE_INTERNAL_STORAGE <uses-permission>元素,因为没有此类权限。

答案 1 :(得分:0)

来自documentation of getExternalStorageDirectory()

  

返回主外部存储目录。

注意单词 primary (即可能有更多)。

  

注意:不要被&#34;外部&#34;这个词弄糊涂。这里。此目录最好被视为媒体/共享存储。它是一个文件系统,可以容纳相对大量的数据,并在所有应用程序之间共享(不强制执行权限)。传统上这是一张SD卡,但它也可以作为内置存储器实现,该设备不同于受保护的内部存储器,可以作为文件系统安装在计算机上。

这意味着某些设备可以拥有更多外部存储设备,而主设备不是SD卡(它们也可能有外部存储设备而根本没有SD卡)。当您将手机插入电脑时,您仍然可以访问此存储空间。

您还可以使用File.getAbsolutePath()获取文件的路径。