2015-07-10 222 views
3

我试图将一些字符串保存到SD卡。但它是抛出此异常打开失败EACCES(权限被拒绝)。我在一台设备上测试了这个(asus zenfone 5)。我已经在清单文件WRITE_EXTERNAL_STORAGE中声明了权限,安装了我的SD卡并可以从中读取数据(我亲自通过复制一些mp3文件并将其播放)进行检查。因为这是一个手机特定的应用程序,手机内有一个内部和外部存储器,我想保存在外部SD卡中的文件,我写了这样的代码。我通过使用“cd”和“ls”命令获得了使用终端仿真器应用程序的外部SD卡的绝对路径。我的手机没有固定,所以我不能直接发布任何权限更改。我已经尝试所有可能的方法可能通过谷歌和stackoverflow。请帮我开放失败EACCES(权限被拒绝)

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


    } 

回答

3

我假设你华硕Zenfon E为>= KitKatAndroid版本上运行。所以,由于KITKAT由于SD卡写入策略发生重大变化,除了您的应用程序私人文件夹(/storage/../data/com.example/SD卡)之外,您将无法在SD卡上写入数据。

要访问SD卡上的此文件夹,在KitKat中添加了新的API。此API将返回包含所有应用私人文件夹路径的文件数组。

File[] files = ContextCompat.getExternalFilesDirs(context, null) 

默认情况下,0th位置路径类似于年长API Environment.getExternalStorageDirectory()返回的路径,这是主存储。 1st位置(一般情况下)将其他存储目录一般是SD卡。使用此文件路径在SD卡上写入。在写入任何内容之前,请务必确认SD卡的已安装状态。

希望得到这个帮助。如果您遇到任何其他问题,请告知我。

+0

这是有帮助的,我能写在SD卡的android文件夹,因为文件[1]给了我的路径,有没有什么方法可以使用这个或任何其他方法获得SD卡的根路径? –

+0

耶稣基督,花了我两个小时找到你的答案。非常感谢。我试了很多年的环境调用,但它从来没有用于我的Android 6系统(早期版本工作正常)。这里有我的赞赏! –

0

而不是使用硬编码的目录,请尝试使用调用Environment.getExternalStorageDirectory并通过附加名称到路径打开一个文件

+0

没有,但没有积极的结果 –

+0

仍然收到同样的错误? – 2015-07-10 06:25:35

+0

是的,我仍然遇到同样的问题。 –

1

几个小时前我试过这个代码保存图像它适用于我。

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

请你解释我的答案和BlackHamm3rJack的答案有什么区别? –

相关问题