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

时间:2019-09-05 06:34:41

标签: 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 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;

        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();
        }
    }

我通过verifyStoragePermissions()方法调用onCreate

1 个答案:

答案 0 :(得分:0)

读/写外部文件并不能为所有目录提供一揽子许可。值得注意的是,它不授予root用户权限。每个应用程序在外部存储设备上都有自己的个人目录,请改写到该目录中。