操作文件异常 open failed: EACCES (Permission denied)

d383137359 2016-11-10 11:56:38
首先已经申请了在xml已经申请了访问内部外部等权限,多的都申请了。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE" />
<uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" />


USB的挂载目录是

/storage/usbhost/


然后复制文件代码是

String oldPath = "/data/data/com.abc.d/files/aa.dat";
String newPath = Environment.getExternalStorageDirectory()
.getParentFile().getParentFile().getPath()
+ "/usbhost/aa.dat";

try {
int bytesum = 0;
int byteread = 0;
File oldfile = new File(oldPath);
if (oldfile.exists()) { // 原文件存在
InputStream inStream = new FileInputStream(oldPath); // 读入原文件
FileOutputStream fs = new FileOutputStream(newPath); //<- 此句执行异常
byte[] buffer = new byte[1444];
while ((byteread = inStream.read(buffer)) != -1) {
bytesum += byteread;
System.out.println(bytesum);
fs.write(buffer, 0, byteread);
}
inStream.close();
fs.close();
}
Toast.makeText(LoginActivity.this, "成功!",
Toast.LENGTH_SHORT).show();
} catch (Exception e) {
Toast.makeText(LoginActivity.this, "失败!",
Toast.LENGTH_SHORT).show();
e.printStackTrace();
}


执行时始终报异常xxxxx路径的文件open failed: EACCES (Permission denied)

附说明:使用adb shell命令cp xxxx/aa.dat /storage/usbhost/aa.dat是可以的
...全文
2740 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
behind8 2020-01-15
  • 打赏
  • 举报
回复
Android 4.0以后的版本认为UI线程进行数据操作这样的写法不安全,读取和写入文件一般大多是由于这个原因引起的。

解决方法:新开一个线程
u010664527 2016-11-26
  • 打赏
  • 举报
回复
博主 你的问题解决了吗,我也遇到相同的问题,请赐教
d383137359 2016-11-11
  • 打赏
  • 举报
回复
引用 5 楼 q849340003 的回复:
[quote=引用 4 楼 d383137359 的回复:] [quote=引用 2 楼 q849340003 的回复:] 你先确认你操作的是你app目录下的文件么 linux的文件权限限制了app在data/分区下面只能操作本应用包名下面的文件,如果你操作data下的文件不是本应用包名下面的文件会提示没有权限(这两种例外,1.有root权限,2是系统app具有系统权限)
终于有人了,感谢,确定是本包下的。相同的操作,我复制到另一处是可以的,比如内置的储存空间是能正常完成的。复制到U盘中就会出现上述异常。[/quote] 你这段权限声明的地方看下放在哪里的?
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
    <uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" />
还有就是 你确定你外接USB 挂载的路径是在这下面么"/usbhost/ 外接的USB好像java层没法直接访问,需要通过jni去写C++代码通过读写扇区的方式来达到访问USB的目的,你百度查查android有没有提供对usb进行相关操作的API,[/quote] 权限是放AndroidManifest.xml文件中与<application>标签同级

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
    <uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" />

    <application
        android:hardwareAccelerated="false"
        android:icon="@drawable/logo1"
        android:label="@string/menu_title"
        android:sharedUserId="android.uid.system" >
        <activity
U盘确定是挂载到/storage/usbhost/下的。因为我使用adb shell 命令直接 cp xxx/xx /storage/usbhost/xx是可以的复制过去的
blanks.w 2016-11-10
  • 打赏
  • 举报
回复
引用 4 楼 d383137359 的回复:
[quote=引用 2 楼 q849340003 的回复:] 你先确认你操作的是你app目录下的文件么 linux的文件权限限制了app在data/分区下面只能操作本应用包名下面的文件,如果你操作data下的文件不是本应用包名下面的文件会提示没有权限(这两种例外,1.有root权限,2是系统app具有系统权限)
终于有人了,感谢,确定是本包下的。相同的操作,我复制到另一处是可以的,比如内置的储存空间是能正常完成的。复制到U盘中就会出现上述异常。[/quote] 你这段权限声明的地方看下放在哪里的?
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
    <uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_INTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" />
还有就是 你确定你外接USB 挂载的路径是在这下面么"/usbhost/ 外接的USB好像java层没法直接访问,需要通过jni去写C++代码通过读写扇区的方式来达到访问USB的目的,你百度查查android有没有提供对usb进行相关操作的API,
d383137359 2016-11-10
  • 打赏
  • 举报
回复
引用 2 楼 q849340003 的回复:
你先确认你操作的是你app目录下的文件么 linux的文件权限限制了app在data/分区下面只能操作本应用包名下面的文件,如果你操作data下的文件不是本应用包名下面的文件会提示没有权限(这两种例外,1.有root权限,2是系统app具有系统权限)
终于有人了,感谢,确定是本包下的。相同的操作,我复制到另一处是可以的,比如内置的储存空间是能正常完成的。复制到U盘中就会出现上述异常。
d383137359 2016-11-10
  • 打赏
  • 举报
回复
这么大个论坛,都没人知道么……
blanks.w 2016-11-10
  • 打赏
  • 举报
回复
你先确认你操作的是你app目录下的文件么 linux的文件权限限制了app在data/分区下面只能操作本应用包名下面的文件,如果你操作data下的文件不是本应用包名下面的文件会提示没有权限(这两种例外,1.有root权限,2是系统app具有系统权限)
d383137359 2016-11-10
  • 打赏
  • 举报
回复
是问题困难么,都没人回答。 另外android版本是4.4.4

80,469

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧