【问题标题】:FIleNotFound open failed: EACCES (Permission denied)FIleNotFound 打开失败:EACCES(权限被拒绝)
【发布时间】:2012-09-07 01:35:09
【问题描述】:

当我尝试写入“/mnt/sdcard/report/”时,我在 Android 上遇到“打开失败:EACCES(权限被拒绝)”。我的第一步是创建不起作用的“报告”文件夹。然后我尝试编写引发上述异常的内容。我已将<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 设置为应用程序标记的对等(外部)。当我收到错误时,我正在尝试在模拟器上运行 JUnit 仪器测试。有任何想法吗?代码如下。

        if (mReportDir == null) {
            if (mContext.getFilesDir() != null) {
                mOutputStream = mContext.openFileOutput(fileName, 0);
            } else {
                mOutputStream = mTargetContext.openFileOutput(fileName, 0);
            }
        } else {
            File f = new File(mReportDir);
            if (!f.exists()) {
                f.mkdirs();
            }
            mOutputStream = new FileOutputStream(new File(mReportDir, fileName));
        }

mReportDir 等于“/mnt/sdcard/report”,fileName 等于“junit-report.xml”,我相信 f.mkdirs 返回 false,并且永远不会创建该目录。我想知道为什么我的权限被拒绝。我正在尝试重用自定义 JUnit 测试运行器。

我已将 hw.sdCard=yes 添加到 avd 设置。启动后,我进入 shell 并输入 mount:

~$ adb shell
# mount
rootfs / rootfs ro 0 0
tmpfs /dev tmpfs rw,nosuid,mode=755 0 0
devpts /dev/pts devpts rw,mode=600 0 0
proc /proc proc rw 0 0
sysfs /sys sysfs rw 0 0
none /acct cgroup rw,cpuacct 0 0
tmpfs /mnt/asec tmpfs rw,mode=755,gid=1000 0 0
tmpfs /mnt/obb tmpfs rw,mode=755,gid=1000 0 0
none /dev/cpuctl cgroup rw,cpu 0 0
/dev/block/mtdblock0 /system yaffs2 ro 0 0
/dev/block/mtdblock1 /data yaffs2 rw,nosuid,nodev 0 0
/dev/block/mtdblock2 /cache yaffs2 rw,nosuid,nodev 0 0

我再次从 Ant 脚本以编程方式启动 AVD。我可以通过编程方式安装 SD 卡吗?

【问题讨论】:

  • 你见过stackoverflow.com/questions/2121833/…——特别是WRITE_EXTERNAL_STORAGE权限吗?
  • 是的,我很抱歉!所以在我的帖子中吃了我的使用权限标签。我已经编辑了帖子,请重新阅读。 :)
  • 你能展示你用来尝试创建目录的代码吗(因为你暗示它不存在,这是你当前的失败点)?
  • /mnt/sdcard = Environment.getExternalStorageDirectory()?如果不是,您可能会成为chainfire.eu/articles/113/… 的受害者
  • 乍一看,你的代码看起来不错——我主要是想确保你调用 mkdir() [或 mkdirs(),就像你一样]。至于在模拟器中安装虚拟卡——这可能是问题所在。如果你adb shell 可以输入命令mount 来查看挂载的内容。在我的模拟器上(没有虚拟 sd 卡),ls -l /mnt 显示 /mnt/sdcard 根本没有访问权限 -- d--------- system system 2012-09-12 10:55 sdcard

标签: java android android-emulator


【解决方案1】:

发现问题了!创建 AVD 时,我从未指定 SD 卡的大小。我编辑并设置了 512MiB 的大小,现在它可以写了!谢谢所有回复的人! :)

【讨论】:

  • 遇到了完全相同的问题。感谢分享。
猜你喜欢
  • 1970-01-01
  • 2017-07-10
  • 2020-11-29
  • 1970-01-01
  • 2019-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-23
相关资源
最近更新 更多