【问题标题】:Android internal storage reading fileAndroid内部存储读取文件
【发布时间】:2012-03-22 23:16:35
【问题描述】:

我遇到了 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

谁能告诉我我做错了什么?

提前致谢

编辑:

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

adb (chmod 777 image.jpeg) 

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

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

【问题讨论】:

  • 确定文件在包根目录中,而不是在files 子目录中吗?将文件放在包根目录中的情况很少见。
  • 在包根目录中是文件夹 images 并且在该文件夹中我有文件。如果设备没有外部存储,我正在使用内部存储。我不知道如何使用 MODE_WORLD_WRITEABLE 在 files 中创建文件夹,以便 cam 应用程序可以写入捕获的图像。

标签: java android fileinputstream


【解决方案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

【讨论】:

  • 嗨,也许你可以在你的答案中包含这个,因为大多数人想在拍完照片后在画廊里展示他们的照片,并想知道为什么它不起作用。保存后进行广播以注册文件:sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://"+file.getAbsolutePath())));
  • getExternalStoragePublicDirectory() 返回外部存储。如果外部不可用,我想将图像保存到内部存储。
  • @Sparky:我找不到另一种解决方案,所以我使用了这个。谢谢:)
【解决方案2】:

参考Android developers,您应该使用openFileOutput()openFileInput() 处理内部存储...您不允许/不能在那里创建目录。 Android 自己做。当您的应用程序将被删除时,这些数据将被清除。

【讨论】:

    猜你喜欢
    • 2020-09-13
    • 1970-01-01
    • 1970-01-01
    • 2014-09-08
    • 1970-01-01
    • 2020-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多