2012-03-22 134 views
3

我有一个Android内部存储问题。我在包根文件夹中创建了一个文件夹,调用getDir()MODE_WORLD_WRITEABLE,因为我想让相机应用程序在此文件夹中写入捕获的图像。无论如何,我可以看到捕获的图像在DDMS的文件夹内。 问题是我无法读取该文件。Android内部存储读取文件

我试图读取文件使用此代码:

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) 

我能够读取图像。有趣的是,凸轮应用程序正在使用----rwxr-x将图像文件写入sdcard

有没有办法在运行时更改文件权限?

+0

你是否确定该文件在软件包根目录中,而不是在'files'子目录中?将文件放入程序包根目录本身并不常见。 – 2012-03-22 23:23:59

+0

在包根目录下是文件夹_images_,并在该文件夹内有文件。如果设备没有外部存储,我正在使用内部存储。我不知道如何使用MODE_WORLD_WRITEABLE在_files_中创建文件夹,以便cam应用程序可以写入捕获的图像。 – Emran 2012-03-22 23:30:25

回答

1

为什么不把它放在默认的照片目录中?

File path = Environment.getExternalStoragePublicDirectory(
     Environment.DIRECTORY_PICTURES); 
File file = new File(path, "DemoPicture.jpg"); 

(来源:http://developer.android.com/reference/android/os/Environment.html

又见一个更完整的例子调用相机应用:http://developer.android.com/training/camera/photobasics.html

+1

嗨,也许你可以在你的答案中包括这个,因为大多数人想要在画廊展示他们的照片后,采取它并想知道为什么它不工作。保存广播以后注册文件:'sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,Uri.parse(“file://”+ file.getAbsolutePath())));' – Vossi 2012-03-23 00:28:33

+0

getExternalStoragePublicDirectory()返回外部存储。如果外部不可用,我想将图像保存到内部存储器。 – Emran 2012-03-23 00:59:10

+0

@Sparky:我无法找到另一个解决方案,所以我使用了这个。谢谢 :) – Emran 2012-03-24 20:22:44

0

引用到Android developers你应该使用openFileOutput()openFileInput()对内部存储工作...你不被允许/不能在那里制作演出。 Android自己做..当你的应用程序被删除时,这些数据将被清除。

相关问题