Android 创建文件时出现 java.io.IOException: Operation not permitted异常

这篇具有很好参考价值的文章主要介绍了Android 创建文件时出现 java.io.IOException: Operation not permitted异常。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、android 6.0

        6.0之前是不需要动态申请权限的,直接在manifest.xml中申请即可以正常使用。

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

二、安卓10,SDK=29

        安卓10开始,安卓继续加强了限制,如果需要读写SD卡,还需要额外的进行申请requestLegacyExternalStorage申明。

<application
        android:name=".common.base.BaseApplication"
        android:allowBackup="true"
        android:icon="@mipmap/logo"
        android:label="@string/app_name"
        android:largeHeap="true"
        android:requestLegacyExternalStorage="true" //添加这一行
        android:roundIcon="@mipmap/logo"
        android:supportsRtl="true"
        android:theme="@style/AppTheme"
        android:usesCleartextTraffic="true"
        tools:replace="android:icon,android:roundIcon">

三、安卓11,SDK=30

        安卓11的时候继续强化对SD卡读写的管理,引入了MANAGE_EXTERNAL_STORAGE权限,而之前的WRITE_EXTERNAL_STORAGE已经失效了。

        并且MANAGE_EXTERNAL_STORAGE权限只能跳转设置页面申请。

四、安卓13,SDK=33


        android 13上,取消了android.permission.WRITE_EXTERNAL_STORAGE权限,只需要申请android.permission.MANAGE_EXTERNAL_STORAGE权限。

以下是我遇到的问题分析:

        创建文件时,一直报Operation not permitted异常,没有权限。但是我在代码里把以上权限完全开启了。而且android 11虽然开启了强制分区存储,但是只针对 targetSDK>=30的情况,而我的应用targetSDK版本为29。

        后来发现是我的文件名使用当前时间来命名(2023-2-10 15:38:45),而当前时间里带有 “:”,导致文件创建权限不足。

java.io.ioexception: operation not permitted,文件读取、创建,android,android studio,ide

        许多的字符都属于公共空间文件的不合法字符(如上图),但是在私有空间是没有这个问题的。可能是由于在公有空间和私有空间访问走的是两套机制。公有空间会走MediaStore,私有空间并不会。

        我们在android 11系统的手机上,手动创建文件时,文件名也不能包含这些字符。android 10 之前就没有发现这个问题。

 所以问题的解决方法有两种:

        1、把文件放到私有空间(即内存)中

        2、修改文件名,避免特殊字符文章来源地址https://www.toymoban.com/news/detail-784514.html

到了这里,关于Android 创建文件时出现 java.io.IOException: Operation not permitted异常的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • java.io.IOException: Cannot run program “python“: CreateProcess error=2, 系统找不到指定的文件。

    java.io.IOException: Cannot run program “python”: CreateProcess error=2, 系统找不到指定的文件。 原因: python 这个命令 用java运行没有找到 解决:直接改用python.exe这个文件的绝对路径 错误源代码 修改后源代码

    2024年02月13日
    浏览(40)
  • Failed to parse multipart servlet request; nested exception is java.io.IOException,文件上传异常的问题如何解决

    背景: 有时候我们上传文件时会遇到这种报错, \\\"Failed to parse multipart servlet request; nested exception is java.io.IOException: The temporary upload location [C:\\\\Users\\\\XXXX\\\\AppData\\\\Local\\\\Temp\\\\tomcat.2460390372185321891.8082\\\\work\\\\Tomcat\\\\localhost\\\\ROOT] is not valid\\\"。 导致上传文件失败。 原因: 这种问题出现的原

    2024年02月03日
    浏览(44)
  • 【方案探讨】 出现java.io.IOException解决方法

    欢迎来到我的博客!在这里,我将分享我对问题的独特见解和解决方案。通过这篇博客,我希望能够为您带来新的思考方式,启发您寻找问题的不同角度,并探索创新的解决方案。 每个问题都是一个机会,是一个学习的过程。在这里,我将分享我对问题的思考过程和解决方案

    2024年04月25日
    浏览(50)
  • java.io.IOException: Broken pipe管道断开

    一、Broken pipe产生原因分析 1.当访问某个服务突然服务器挂了,就会产生Broken pipe; 2.客户端读取超时关闭了连接,这时服务器往客户端再写数据就发生了broken pipe异常! 3.端口冲突,地址已被使用,也会导致Broken pipe 二、方案 1.问题一分析服务器为什么挂了。 2.问题二使用jp

    2024年02月10日
    浏览(50)
  • java.io.IOException: Connection reset by peer

    接口返回的时候报错,java.io.IOException: Connection reset by peer,具体报错信息如下: 原因: 接口返回的数据量太大报错, 解决办法: 修改nginx缓存配置信息。 nginx原配置信息: nginx修改后信息: 注意: \\\"proxy_busy_buffers_size\\\"必须等于或大于\\\"proxy_buffer_size\\\"的最大值。

    2024年02月16日
    浏览(51)
  • android.system.ErrnoException: open failed: EPERM (Operation not permitted)

    android 10(Q)开始增加了沙盒机制,不能直接把文件保存到/sdcard目录下,只能保存到APP专属目录下;AndroidManifest.xml在标签下增加属性【android:requestLegacyExternalStorage=“true”】可以暂时保存到/sdcard路径下,但是Android11开始就失效了 我们可以通过Context的getExternalFilesDir(null)方法获取

    2024年02月12日
    浏览(49)
  • java.io.IOException: UT010029: Stream is closed异常

    后端提供一个excel文件模板下载接口 我们使用了ServletOutputStream来向客户端发送响应。在finally块中不需要关闭输出流,因为Servlet容器会在请求处理完成后自动关闭输出流。如果在finally块中尝试关闭已关闭的输出流,就会抛出java.io.IOException: Stream is closed异常。因此,我们可以

    2024年02月14日
    浏览(59)
  • java.io.IOException: Unable to establish loopback connection

            在win10电脑上启动SpringBoot项目出现以下报错 org.springframework.context.ApplicationContextException: Failed to start bean \\\'webServerStartStop\\\'; nested exception is org.springframework.boot.web.server.WebServerException: Unable to start embedded Tomcat server         at org.springframework.context.support.DefaultLifecycleProcesso

    2023年04月09日
    浏览(43)
  • 已解决org.springframework.amqp.AmqpIOException: java.io.IOException

    已解决org.springframework.amqp.AmqpIOException: java.io.IOException org.springframework.amqp.AmqpIOException: java.io.IOException AmqpIOException 是 Spring AMQP 框架中的一个异常类,它表示在与 RabbitMQ 交互时发生了 IO 异常。 下滑查看解决方法 通常,这个异常是由于与 RabbitMQ 的连接断开或无法建立连接导致

    2024年02月08日
    浏览(44)
  • 【Java-IO流】cn.hutool.core.io.IORuntimeException: IOException: Stream closed

    今天在项目中需要读取request请求中的body多次,当我直接去read的时候出现了问题; 报错如下: 产生的原因如下: httpServletRequest中的流只能读取一次的原因 想要多次读取request中body的内容,需要先存储一份,然后读取; 问了导师,有一个类可以多次读取body内容,因为他会将

    2024年02月11日
    浏览(70)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包