Android-FileNotFoundException打开失败:EACCES(权限被拒绝)

Android-FileNotFoundException打开失败:EACCES(权限被拒绝),android,filenotfoundexception,samsung-galaxy,Android,Filenotfoundexception,Samsung Galaxy,我有一个应用程序,在登录时我从服务器下载图像。 在第一次登录时,一切正常,但当我卸载应用程序并再次安装时,出现以下异常: java.io.FileNotFoundException: /存储/仿真/0/Android/data/com.gilapp.Android.app/files/images/book_118.png: 打开失败:EACCES权限被拒绝 无法保存图像 当我尝试创建输出流时会发生这种情况: OutputStream output = new FileOutputStream(

我有一个应用程序,在登录时我从服务器下载图像。 在第一次登录时,一切正常,但当我卸载应用程序并再次安装时,出现以下异常:

java.io.FileNotFoundException: /存储/仿真/0/Android/data/com.gilapp.Android.app/files/images/book_118.png: 打开失败:EACCES权限被拒绝

无法保存图像

当我尝试创建输出流时会发生这种情况:

OutputStream output = new FileOutputStream(filePath);
在进入应用程序信息->存储->清除数据后,当我进行第二次安装时,图像下载正常

另一个重要的一点是,这只发生在三星的平板电脑上:SM-T800 API级别23

在其他设备中,我测试的设备没有出现这种情况:三星SM-G900H API级别23,华硕P028 API级别24,三星SM-G950F API级别28,您需要获得写入存储。保存文件之前,请检查权限。此外,还有一些用于此工作的库:


更好的方法是使用访问存储中的文件

卸载应用程序时,GetExternalFilesDir中的所有文件都将被删除,因此/images目录已消失

重新安装后,您可以再次将文件写入不需要任何权限的目录

不是在运行时。不在舱单上

但您希望它们位于..../images目录中

你得自己照顾那个目录


检查目录是否存在,然后在尝试将文件放入目录之前创建它。

如果您的应用程序指向android版本10

在清单中,包括在应用程序下添加

android:requestLegacyExternalStorage=true


请注意,此解决方案在Android 11中不再有效。

您是否已授予此设备的存储权限?您可以共享您的代码吗?是的,这是所有权限:还需要在Api级别高于23的运行时获得危险权限。请检查答案以了解如何获得该权限。谢谢,您是对的,当我使用运行时权限时,不会出现此异常。但是你知道为什么它只发生在三星的平板电脑上:SM-T800 API级别23欢迎,runetime权限是从API级别23添加的:这是绝对正确的答案,解决了我在Android 10上的问题。谢谢@viveksuggu!