Android 6.0权限导致dest.mkdirs() 一直返回false问题: 无法写入文件:
2017-11-21 17:39
656 查看
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的问题。。
相关文章推荐
- Android无法在外置存储上创建文件夹,file.mkdirs()一直返回false
- 【Android】无法在外置存储上创建文件夹,file.mkdirs()一直返回false
- Android SD卡创建文件夹/文件 SD卡写入内容 SD卡删除文件 计算SD卡文件大小,Android6.0+权限
- 奇怪问题,Android项目中含有return.9.png资源文件导致项目报错无法编译出R.java文件
- 在android 6.0以上无法获取READ_PHONE_STATE权限的SecurityException的问题
- android 6.0文件写入外置SD卡的问题!
- Android引用百度定位API第三方组件后导致其它.so文件无法正常加载的问题
- MySQL中配置文件my.cnf因权限问题导致无法启动的解决方法
- Android学习之实现WebView中input="file"选择文件,处理选择图片无法返回类型问题
- 一个由于文件权限问题导致的SQL Server 2008 无法正常启动的问题
- NFS文件无法写入的权限问题
- A网站引用B服务器虚拟目录文件导致:网站部署到IIS7上出现HTTP 错误 500.19(由于权限不足而无法读取配置文件)的问题
- Fragment中百度地图API解决 android 6.0无法定位的问题,一片蓝色,返回4.9E-324
- Android mkdirs或mkdir一直返回false(createNewFile也失败)
- Android手机ROOT之后更改字体文件导致无法启动的问题
- 在android 6.0以上无法获取READ_PHONE_STATE权限的SecurityException的问题
- 在android 6.0以上无法获取READ_PHONE_STATE权限的SecurityException的问题
- ftpClient.makeDirectory(path) 一直返回false,无法创建目录的问题
- Android 6.0 ROOT 后部分程序无法检测 ROOT 权限问题
- Android 6.0 运行时在Fragment中申请权限无法回调 问题