为了账号安全,请及时绑定邮箱和手机立即绑定

android.system.ErrnoException: open failed: ENOENT

标签:
Android

在android4.0的手机上直接创建某个文件的路径一直报这个错:android.system.ErrnoException: open failed: ENOENT (No such file or directory)

我的代码如下:

try {
   long timestamp = System.currentTimeMillis();
   String time = formatter.format(new Date());
   String fileName = "crash-" + time + "-" + timestamp + ".txt";
   String file_dir = getFilePath();
   //       if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
   File dir = new File(file_dir);
   if (!dir.exists()) {
      dir.mkdirs();
   }
   File file = new File(file_dir + fileName);
   if (!file.exists()) {
      file.createNewFile();
   }
   FileOutputStream fos = new FileOutputStream(file);
   fos.write(sb.toString().getBytes());
   //发送给开发人员
   sendCrashLog2PM(file_dir + fileName);
   fos.close();
   //       }
   return fileName;
} catch (Exception e) {
   Log.e(TAG, "an error occured while writing file...", e);
}

而且,我也在Androidmainfest.xml里配置了读写的权限,可还是不行。

于是,我在网上查了很多资料,最终解决了,解决方案如下:

在API23+以上,不止要在AndroidMainfet.xml里面添加权限

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

还要在代码里添加请求的权限:

// Storage Permissions 2     private static final int REQUEST_EXTERNAL_STORAGE = 1; 3     private static String[] PERMISSIONS_STORAGE = { 4             Manifest.permission.READ_EXTERNAL_STORAGE, 5             Manifest.permission.WRITE_EXTERNAL_STORAGE }; 6  7     /** 8      * Checks if the app has permission to write to device storage 9      * 
10      * If the app does not has permission then the user will be prompted to11      * grant permissions12      * 
13      * @param activity14      */15     public static void verifyStoragePermissions(Activity activity) {16         // Check if we have write permission17         int permission = ActivityCompat.checkSelfPermission(activity,18                 Manifest.permission.WRITE_EXTERNAL_STORAGE);19 20         if (permission != PackageManager.PERMISSION_GRANTED) {21             // We don't have permission so prompt the user22             ActivityCompat.requestPermissions(activity, PERMISSIONS_STORAGE,23                     REQUEST_EXTERNAL_STORAGE);24         }25     }

在调用保存的方法前点用即可。

原文链接:http://www.apkbus.com/blog-350046-62787.html

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消