Android 打开失败的EACCES(权限被拒绝)

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”命令获得

我试图将一些字符串保存到sd卡。但它正在抛出此异常打开失败的EACCES(权限被拒绝)。我在一台设备(华硕zenfone 5)上对此进行了测试。我已在manifest file-WRITE_EXTERNAL_存储器中声明了权限,我的sd卡已挂载,并且可以从中写入和读取数据(我已通过复制一些mp3文件并播放这些文件进行了个人检查)。由于这是一款手机专用的应用程序,手机中有内部和外部存储器,我想将文件保存在外部SD卡中,所以我编写了如下代码。我使用终端模拟器应用程序通过使用“cd”和“ls”命令获得了外部sd卡的绝对路径。我的手机没有根目录,因此我无法直接发布任何权限更改。我已经尝试了谷歌和stackoverflow所有可能的方法。请帮帮我

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卡的根路径?