[英]open failed: EACCES (Permission denied) while trying to create csv file
我已经阅读了所有类似的问题,但没有一个对我有帮助。 所以我正在为自己构建一个应用程序,它会随着时间的推移收集一些数据。 我选择使用一个简单的 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();
}
}
我在onCreate
方法中调用verifyStoragePermissions()
。
读/写外部不会为所有目录提供全面的权限。 值得注意的是,它没有授予 root 权限。 每个应用程序在外部存储上都有自己的个人目录,请将其写在那里。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.