欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java.io.FileNotFoundException:/x/x/x/xx.xls:open failed: ENOENT (No such file or directory)

程序员文章站 2022-11-01 16:07:53
运行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),
java.io.FileNotFoundException:/x/x/x/xx.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.xmlapplication添加

android:requestLegacyExternalStorage="true"

进行动态申请权限。

本文地址:https://blog.csdn.net/potato_me/article/details/112506965