Android 6.0权限导致dest.mkdirs() 一直返回false问题: 无法写入文件:
来源:互联网 发布:剪切的数据怎么恢复 编辑:程序博客网 时间:2024/05/16 12:03
Android dest.mkdirs() 一直返回false问题 无法写入文件:
最近在Android开发中遇到了解压文件,一直失败的问题。调试半天总算找出了问题所在。记录一下。下面是碰到问题的代码:
public static void unzip(InputStream is, String dir) throws IOException { File dest = new File(dir); if (!dest.exists()) { //TODO必须 请求 动态权限 boolean b = dest.mkdirs(); Log.i("info",b + "=======此处一直返回false=========="); } if (!dest.isDirectory()) throw new IOException("Invalid Unzip destination " + dest); if (null == is) { throw new IOException("InputStream is null"); } ZipInputStream zip = new ZipInputStream(is); ZipEntry ze; while ((ze = zip.getNextEntry()) != null) { final String path = dest.getAbsolutePath() + File.separator + ze.getName(); String zeName = ze.getName(); char cTail = zeName.charAt(zeName.length() - 1); if (cTail == File.separatorChar) { File file = new File(path); if (!file.exists()) { if (!file.mkdirs()) { throw new IOException("Unable to create folder " + file); } } continue; } FileOutputStream fout = new FileOutputStream(path); byte[] bytes = new byte[1024]; int c; while ((c = zip.read(bytes)) != -1) { fout.write(bytes, 0, c); } zip.closeEntry(); fout.close(); } }
一,检查发现 mianfest 中已经 添加权限 如下:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
二,如果你的App 版本小于 Android 6.0 按照上述判断方式是没问题的。但是Android6.0 后Android 对于权限检查更加全面。我们必须还要在 代码中加以判断 :
1,需要我们请求权限:
ActivityCompat.requestPermissions(MainActivity.this, new String[]{android .Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
2, 在返回 方法中处理:
@Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { //super.onRequestPermissionsResult(requestCode, permissions, grantResults); switch (requestCode) { case 1: if (grantResults[0]== PackageManager.PERMISSION_GRANTED) { //创建文件夹 if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) { File file = new File(Environment.getExternalStorageDirectory() + "/aa/bb/"); if (!file.exists()) { Log.d("jim", "path1 create:" + file.mkdirs()); } } break; } }
这样 才算解决了 mkdir 一直 返回 false的问题。。
阅读全文
0 0
- Android 6.0权限导致dest.mkdirs() 一直返回false问题: 无法写入文件:
- 【Android】无法在外置存储上创建文件夹,file.mkdirs()一直返回false
- Android无法在外置存储上创建文件夹,file.mkdirs()一直返回false
- Android mkdirs或mkdir一直返回false(createNewFile也失败)
- 文件读写 file.mkdirs()为啥总是返回false
- NFS文件无法写入的权限问题
- 权限问题导致无法删除ftp文件
- ftpClient.makeDirectory(path) 一直返回false,无法创建目录的问题
- android BluetoothGatt.writeCharacteristic()写入返回false
- Android问题——PopupWindow的isShowing()一直都是返回false
- Suse环境File.mkdirs()创建的目录判断是否可写返回false的问题
- 上传文件,is_uploaded_file($_FILES['imgfile']['tmp_name']) 一直返回false
- MemcachedClient.store 一直返回false?
- Android Context.bindService 返回 false 问题
- lua实现以字符串内容写入文件,成功返回 true,失败返回 false读取文件内容
- 一个由于文件权限问题导致的SQL Server 2008 无法正常启动的问题
- file_get_content一直返回false (thinkphp)
- linux数据库data文件转移到其他服务器的权限问题导致无法看到数据表
- 攻击手段
- CentOS 7 安装FTP服务器(vsftpd)
- 连表查询
- 基础练习 字符串对比
- error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
- Android 6.0权限导致dest.mkdirs() 一直返回false问题: 无法写入文件:
- Junit单元测试
- 聚合
- 注意PHP的empty判断的坑
- “Versions of Spring facet could not be detected”的解决方法
- 自定义轮播图
- Kinect V2 接上电脑不停断开和连接
- 菜鸟译文(三)——JDK6和JDK7中substring()方法的对比
- Python的C拓展简介