安卓内部存储读取文件

3

我有一个与Android内部存储相关的问题。我已经在包根目录中创建了一个文件夹,调用getDir()并使用MODE_WORLD_WRITEABLE,因为我希望相机应用程序将捕获的图像写入此文件夹。无论如何,我可以使用DDMS看到捕获的图像在该文件夹中。

问题是我无法读取该文件。

我尝试使用以下代码读取文件:

File file = context.getDir("images", Context.MODE_WORLD_READABLE);
File image = new File(file, "image.jpeg");
if (image.canRead()) 
    Log.w("read", "can read");
else
    Log.w("read", "can't read");

在LogCat中,只有第二条信息(无法读取)。

我也尝试使用文件名创建FileInputStream,但是我收到了FileNotFoundException

有人可以告诉我我在这里做错了什么吗?

提前感谢。

编辑:

读取文件是正确的,但唯一的问题是当相机应用程序将图像保存到指定位置时,相机应用程序对图像文件设置的权限为-rwxrwx---。更改权限后

adb (chmod 777 image.jpeg) 

我能阅读图像。有趣的是Cam应用程序正在使用----rwxr-x将图像文件写入sdcard
在运行时有没有办法更改文件权限?

你确定文件在包根目录中,而不是在“files”子目录中吗?将文件放在包根目录中非常罕见。 - David Given
在包根目录下有一个名为_images_的文件夹,里面有一些文件。如果设备没有外部存储器,我会使用内部存储器。我不知道如何在_files_文件夹中创建一个MODE_WORLD_WRITEABLE的文件夹,这样相机应用程序就可以写入拍摄的图像了。 - Emran
2个回答

1

1
嗨,也许你可以在回答中包含这个内容,因为大多数人拍照后都想在相册中展示自己的照片,但不知道为什么无法实现。在保存文件后,可以通过发送广播来注册该文件,代码如下:sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://"+file.getAbsolutePath()))); - Vossi
getExternalStoragePublicDirectory() 返回外部存储。如果外部存储不可用,我想将图像保存到内部存储。 - Emran
@Sparky:我没有找到其他解决方案,所以我使用了这个。谢谢 :) - Emran

0

参考Android开发者的建议,你应该使用openFileOutput()openFileInput()来处理内部存储...这里不允许/也不需要创建目录。Android会在必要时自动创建。这些数据将在你的应用被删除时一并清除。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接