java.io.FileNotFoundException:/x/x/x/xx.xls:open failed: ENOENT (No such file or directory)
程序员文章站
2022-03-29 23:07:59
运行Android Studio时,输出java.io.FileNotFoundException: /storage/emulated/0/Excel/Person/收集的信息2.xls: open failed: ENOENT (No such file or directory),首先,确定相关权限已经开启AndroidManifest.xml
运行Android Studio时,输出
java.io.FileNotFoundException: /storage/emulated/0/Excel/Person/收集的信息2.xls: open failed: ENOENT (No such file or directory),
首先,确定相关权限已经开启
AndroidManifest.xml
<!-- 添加上网许可 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission
android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
tools:ignore="ProtectedPermissions" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- 往SDCard写入数据权限 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
发现还是不行,检查android版本,敲黑板
1、在Android 6.0 (API 23) 发布之前, 所有的权限都在安装应用的时候显示给用户,用户选择安装则表示全部接受这些权限, 之后无法撤销对这些权限的授权。
2、Android 6.0开始, 一部分比较危险的权限需要在程序运行时显式弹框,请求用户授权。至于什么时候弹这个框,由应用程序自己决定。
对于其他权限,认为不是很危险,所以仍然保持原来的做法,在用户安装应用程序时就予以授权。
还需要注意的是,在设置中,对于应用的危险权限,用户可以选择性地进行授权或者关闭。
MainActivity.java
private static final int MY_PERMISSIONS_REQUEST =1;
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE},
MY_PERMISSIONS_REQUEST);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestCode == MY_PERMISSIONS_REQUEST) {
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
saveToExcel.writeToExcel("machines","names","reasons","treatments","times");
//saveToExcel.writeToExcel(name,sex,phone,address);
Toast.makeText(MainActivity.this, "Permission Denied", Toast.LENGTH_SHORT).show();
} else {
// Permission Denied
Toast.makeText(MainActivity.this, "Permission Denied", Toast.LENGTH_SHORT).show();
}
return;
}
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
Android 10及以上系统,需要在AndroidManifest.xml的application添加
android:requestLegacyExternalStorage="true"
进行动态申请权限。
本文地址:https://blog.csdn.net/potato_me/article/details/112506965
上一篇: 兄台,江湖再见
下一篇: Markdown写文章的一些小技巧