【问题标题】:java.io.IOException: Read-only file systemjava.io.IOException:只读文件系统
【发布时间】:2012-03-11 11:35:13
【问题描述】:
File mediaDir = new File("media");
if (!mediaDir.exists()){
    mediaDir.createNewFile();
    mediaDir.mkdir();

}

File f = new File("/data/data/com.test.image/files/media/Voucher.jpg");
f.createNewFile();
FileOutputStream fos = new FileOutputStream(f);
fos.write(b);
fos.close();

尝试在手机内存中写入文件,但报错:java.io.IOException: Read-only file system

【问题讨论】:

    标签: java android


    【解决方案1】:

    猜测 /data/data 不是外部存储。您需要具有 root 权限才能写入 /data 目录。参考Data directory has no read/write permission in Android

    【讨论】:

    【解决方案2】:

    您正在Android系统的根目录中创建不允许任何应用程序的文件。

    要创建特定于您的应用程序的目录,请使用getDir(String dirName, int mode) 而不是new File("media")。通过只调用,您可以创建媒体目录并使用它。

    无需像在上面的代码中那样做这么多的事情。也不需要在清单中给予任何许可。

    【讨论】:

    • 虽然您已经接受了答案,但我认为这不是您想要的。 /data/data 是安装所有应用程序包的目录。您的应用程序包也将仅保存在此目录 (/data/data/) 中。所以假设你的包名是com.test.image,在这种情况下你的媒体目录会被创建,它的路径是/data/data/com.test.image/app_media。所以如果你使用activity/context的getDir方法,你也可以直接访问这个/data/data文件夹并写入文件。无需在清单中写入权限。
    【解决方案3】:

    您可以尝试以下方法在Activity 中创建一个文件夹

    this.getDir("folder_name", Context.MODE_PRIVATE);
    

    source

    【讨论】:

      【解决方案4】:

      使用 mediaDir.mkdirs(); 而不是 mediaDir.mkdir(); 您还必须要求 WRITE_EXTERNAL_STORAGE 权限

      【讨论】:

      • 同样的问题..它抛出同样的错误....我什至添加了
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-10
      • 1970-01-01
      • 2012-06-03
      • 2020-04-26
      • 2016-08-04
      • 2020-07-01
      相关资源
      最近更新 更多