当前位置: 首页 > 知识库问答 >
问题:

Android Studio收到错误IOException:创建文件时不允许操作

叶国兴
2023-03-14

我正在尝试创建一个文件。

File imagesFolder = new File(Environment.getExternalStorageDirectory(), "testipfs");
File photo= new File(imagesFolder, "desktopWallpaper.jpg");
System.out.println("Saving file in "+photo.getAbsolutePath());
if (!photo.exists()) {
   try {
      photo.createNewFile();
   } catch (IOException e) {
      System.out.println("Failed to create photo");
      e.printStackTrace();
   }
}

但是得到错误操作不允许。

I/System.out: Saving file in /storage/emulated/0/testipfs/desktopWallpaper.jpg
I/System.out: Failed to create photo
W/System.err: java.io.IOException: Operation not permitted
W/System.err:     at java.io.UnixFileSystem.createFileExclusively0(Native Method)
        at java.io.UnixFileSystem.createFileExclusively(UnixFileSystem.java:317)
        at java.io.File.createNewFile(File.java:1008)
        at com.example.ipfs.MainActivity.SavePhotoTask(MainActivity.java:49)
        at com.example.ipfs.MainActivity.onCreate(MainActivity.java:112)

我在清单文件中添加了以下权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

我该如何解决这个问题?

共有3个答案

段成益
2023-03-14

使用此

File imagesFolder = new File(Environment.getExternalStoragePublicDirectory(
     Environment.DIRECTORY_DOWNLOADS), "testipfs");

File photo = new File(imagesFolder, "desktopWallpaper.jpg");
江雅懿
2023-03-14

我期待你在Android11上测试你的应用程序,在Android11上一切都变了。。。你必须申请这个许可

<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE"/>

在你的主要活动中

if (Build.VERSION.SDK_INT >= 30){
        if (!Environment.isExternalStorageManager()){
            Intent getpermission = new Intent();
            getpermission.setAction(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION);
            startActivity(getpermission);
        }
    }

基本上,这只是一种意图,需要用户进行设置以授予我们权限,这在android 11中是必要的,如果你只是请求读写权限,那么你的应用程序只能对设备中的文件进行只读访问

虞博涛
2023-03-14

如果您使用的是Android 10或更高版本,请尝试在Manifest.xml文件中添加请求LegacyExternalStorage。

<application
    ...
    android:requestLegacyExternalStorage="true">
 类似资料:
  • 问题内容: 我正在尝试运行一个Python脚本,该脚本使用由后链接程序创建的二进制文件(xFiles.bin.addr_patched)。但是,我收到此错误。 当我通过ls-l检查此xFiles.bin的权限时,它表明 我认为错误是因为此文件是由其他应用程序创建的,我正在运行的python脚本无法访问它。因为我是ubuntu的初学者,所以我真的不知道如何解决它。对于如何解决这个问题,有任何的建议吗

  • 我收到这个错误,我不知道为什么: SQLException: ResultSet关闭后不允许操作。错误出现在同时(rs1.next()){ 和consultaPortada方法:

  • 本文向大家介绍SQLServer ADODB.Recordset 错误“800a0e78”,对象关闭时,不允许操作,包括了SQLServer ADODB.Recordset 错误“800a0e78”,对象关闭时,不允许操作的使用技巧和注意事项,需要的朋友参考一下 数据库SQLServer,测试程序显示出错信息:"ADODB.Recordset 错误 “800a0e78” 对象关闭时,不允许操作"

  • 我在OpenVZ服务器上创建LXC容器时遇到问题,当LXC尝试创建接口时,我收到下面的错误提示。我不确定OpenVZ是否允许这种配置,这是我第一次尝试。我一直在互联网上寻找解决方案,但我没有找到任何方法来解决我的问题。谢谢你的帮助。谢谢 root@websrv:~#lxc启动ubuntu: 18.04 ubuntu 创建ubuntu启动ubuntu错误:运行失败: /usr/lib/lxd/lxd

  • 我在Android Studio中使用FirebaseAuth和FirebaseUser创建用户登录方法时收到一个错误。主要是告诉我要么将FirebaseUser转换为AuthResult,要么将它更改为auth result,这两种情况都会导致创建firebase用户失败,从而导致在通道plugins.flutter.io/firebase_auth.上找不到createUserWithEmai

  • Log4j2 createondemand=“true”不允许每天创建新文件,尽管使用了带有TimeBasedTriggeringPolicy的RollingFile附加器。 下面是我的log4j2.xml文件。我有两个附加程序,一个用于所有日志,另一个用于自定义目的,它只需要按需生成,但是createOnDemand覆盖了日志的滚动性质,并且不允许为自定义日志创建新的日志文件。