Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 打开失败:尝试创建csv文件时EACCES(权限被拒绝)_Java_Android_Android Studio_Android Permissions_Opencsv - Fatal编程技术网

Java 打开失败:尝试创建csv文件时EACCES(权限被拒绝)

Java 打开失败:尝试创建csv文件时EACCES(权限被拒绝),java,android,android-studio,android-permissions,opencsv,Java,Android,Android Studio,Android Permissions,Opencsv,我读过所有类似的问题,但没有一个对我有帮助。因此,我正在为自己构建一个应用程序,随着时间的推移收集一些数据。我选择使用一个简单的csv文件来保存它(我仍然不确定是否有更好的方法)。我正在使用opencsv库进行作业,但是,我不断收到以下错误: java.io.FileNotFoundException: /storage/emulated/0/TestCSV.csv: open failed: EACCES (Permission denied). 它在api 22上工作 private vo

我读过所有类似的问题,但没有一个对我有帮助。因此,我正在为自己构建一个应用程序,随着时间的推移收集一些数据。我选择使用一个简单的csv文件来保存它(我仍然不确定是否有更好的方法)。我正在使用opencsv库进行作业,但是,我不断收到以下错误:

java.io.FileNotFoundException: /storage/emulated/0/TestCSV.csv: open failed: EACCES (Permission denied).
它在api 22上工作

private void verifyStoragePermissions(){

        String[] perms = {Manifest.permission.WRITE_EXTERNAL_STORAGE,
                        Manifest.permission.READ_EXTERNAL_STORAGE};

        if(ContextCompat.checkSelfPermission(this.getApplicationContext(), perms[0]) == PackageManager.PERMISSION_GRANTED
        && ContextCompat.checkSelfPermission(this.getApplicationContext(), perms[1]) == PackageManager.PERMISSION_GRANTED){
            writeToCsv();
        }
        else{
            ActivityCompat.requestPermissions(MainActivity.this, perms, 1);
        }
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        verifyStoragePermissions();
    }

private void writeToCsv(){
CSVWriter writer=null;
字符串csv=(Environment.getExternalStorageDirectory().getAbsolutePath()+“/TestCSV.csv”);
试一试{
writer=new CSVWriter(new FileWriter(csv));
列表数据=新的ArrayList();
添加(新字符串[]{“国家”,“首都”});
添加(新字符串[]{“印度”、“新德里”});
添加(新字符串[]{“美国”、“华盛顿特区”});
添加(新字符串[]{“德国”、“柏林”});
writer.writeAll(数据);//数据正在添加到csv
writer.close();
}
捕获(IOE异常){
e、 printStackTrace();
}
}

我在
onCreate
方法中调用
verifyStoragePermissions()

Read/write external不会为所有目录提供全面权限。值得注意的是,它不授予root用户权限。每个应用程序在外部存储上都有自己的个人目录,请将其写入其中。

对于23之前的api,它可以正常工作。你所需要做的就是获得读/写外部存储器的许可。@Arthur根据代码,他是这样做的。我确实需要许可。。。
private void writeToCsv(){

        CSVWriter writer = null;

        String csv =  (Environment.getExternalStorageDirectory().getAbsolutePath()+ "/TestCSV.csv");

        try{
            writer = new CSVWriter(new FileWriter(csv));

            List<String[]> data = new ArrayList<String[]>();
            data.add(new String[]{"Country", "Capital"});
            data.add(new String[]{"India", "New Delhi"});
            data.add(new String[]{"United States", "Washington D.C"});
            data.add(new String[]{"Germany", "Berlin"});

            writer.writeAll(data); // data is adding to csv

            writer.close();
        }
        catch (IOException e){
            e.printStackTrace();
        }
    }