这并没有给出任何错误,但我不能在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" />
答案 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()
获取文件的路径。