Android 打开失败的EACCES(权限被拒绝)
我试图将一些字符串保存到sd卡。但它正在抛出此异常打开失败的EACCES(权限被拒绝)。我在一台设备(华硕zenfone 5)上对此进行了测试。我已在manifest file-WRITE_EXTERNAL_存储器中声明了权限,我的sd卡已挂载,并且可以从中写入和读取数据(我已通过复制一些mp3文件并播放这些文件进行了个人检查)。由于这是一款手机专用的应用程序,手机中有内部和外部存储器,我想将文件保存在外部SD卡中,所以我编写了如下代码。我使用终端模拟器应用程序通过使用“cd”和“ls”命令获得了外部sd卡的绝对路径。我的手机没有根目录,因此我无法直接发布任何权限更改。我已经尝试了谷歌和stackoverflow所有可能的方法。请帮帮我Android 打开失败的EACCES(权限被拒绝),android,file-io,android-sdcard,file-access,Android,File Io,Android Sdcard,File Access,我试图将一些字符串保存到sd卡。但它正在抛出此异常打开失败的EACCES(权限被拒绝)。我在一台设备(华硕zenfone 5)上对此进行了测试。我已在manifest file-WRITE_EXTERNAL_存储器中声明了权限,我的sd卡已挂载,并且可以从中写入和读取数据(我已通过复制一些mp3文件并播放这些文件进行了个人检查)。由于这是一款手机专用的应用程序,手机中有内部和外部存储器,我想将文件保存在外部SD卡中,所以我编写了如下代码。我使用终端模拟器应用程序通过使用“cd”和“ls”命令获得
public void savePublicExternalFile(String data){
File folder = new File("/Removable/MicroSD/");
//i have also tried File folder = new File("/Removable/MicroSD");
File myFile = new File(folder,"mydata.txt");
WriteData(myFile, data);
}
private void WriteData(File myFile, String data){
if(t){
Log.i("AbsolutePath",myFile.getAbsolutePath());
t = false;
}
FileOutputStream fileOutputStream=null;
try {
fileOutputStream = new FileOutputStream(myFile);
fileOutputStream.write(data.getBytes());
} catch (Exception e) {
Log.i("exception",e.toString());
} finally {
if(fileOutputStream!=null){
try {
fileOutputStream.close();
} catch (IOException e) {
Log.i("exception", e.toString());
}
}
}
}
与其使用硬编码目录,不如尝试调用
Environment.getExternalStorageDirectory
,并通过将名称附加到该路径来打开文件。几天前,我尝试使用此代码保存图像,它对我有效
void saveFile() {
String RootDir = Environment.getExternalStorageDirectory()
+ File.separator + "any_folder";
File myDir = new File(RootDir);
myDir.mkdirs();
String fname = "mydata.txt";
File file = new File(myDir, fname);
if (file.exists())
file.delete();
try {
FileOutputStream out = new FileOutputStream(file);
out.write(data.getBytes());
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
Toast.makeText(AddText.this, "File saved to 'any_folder' folder",
Toast.LENGTH_LONG).show();
}
我假设您的华硕Zenfone运行在Android
versions=KitKat
上。因此,由于SD卡写入策略发生重大变化,KITKAT将无法在SD卡上写入,除非在您的应用程序专用文件夹(SD卡中的/storage/./data/com.example/
)上
要访问SD卡上的此文件夹,请在KitKat
中添加新的API
。此API将返回包含所有应用程序专用文件夹路径的文件数组
File[] files = ContextCompat.getExternalFilesDirs(context, null)
默认情况下,0th
位置路径类似于旧API环境返回的路径。getExternalStorageDirectory()
这是主存储1st
位置(通常)将是其他存储目录,通常为SD卡。使用此文件路径在SD卡上写入。在SD卡上写入任何内容之前,请确保验证SD卡的安装状态
希望这有帮助。如果您面临任何其他问题,请告诉我。即使这样做了,但没有任何积极的结果。我仍然遇到同样的问题。请提供完整的日志exception@RisingUp这是日志“I/exception”﹕ java.io.FileNotFoundException:/Removable/MicroSD/mydata.txt:open failed:EACCES(权限被拒绝)“传递给
WriteData
文件的字符串而不是类,因为文件
类,afaik需要文件才能存在。你能解释一下你的答案和BlackHamm3rJack的答案有什么区别吗?这很有帮助,我可以在sd卡的android文件夹中写入,因为文件[1]给了我那个路径,有没有什么方法可以让我用这个或其他方法获得sd卡的根路径?