2017-08-28 130 views
-4

我从我的业务数据:FileNotFoundException异常:EACCES(拒绝)

 JSONObject userGuid = new JSONObject(); 
     userGuid.put("userGuid", id); 
     Bitmap bitmap = null; 
     String response = HttpUtil.post(mService + "GetUser", userGuid.toString(), mCookie); 

     JSONObject result = new JSONObject(response).getJSONObject("User"); 
     String temp = result.getJSONArray("UserImage").toString(); 
在接收到的数据

,有一个的Base64图像的用户,我得到了它,将其转换为arryByte,然后我将其转换为的InputStream

 byte[] tmp = Base64.decode(temp, Base64.DEFAULT); 
     InputStream is = new ByteArrayInputStream(tmp); 

我想将它写入文件通过的OutputStream

OutputStream os = new FileOutputStream(f); 

,但我得到这个错误:

java.io.FileNotFoundException: /storage/emulated/0/fcImages/581864034: open failed: EACCES (Permission denied) 

在清单中,我添加这些权限:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="android.permission.INTERNET"/> 

什么是你的主意吗?

编辑 我以这种方式创建文件:

public class FileCache { 

private File cacheDir; 

public FileCache(Context context) { 

    if((Environment 
      .getExternalStorageState()).equals(Environment.MEDIA_MOUNTED)) { 
      cacheDir = new File(Environment.getExternalStorageDirectory(), "fcImages"); 
    } else { 
     cacheDir = context.getCacheDir(); 
    } 
    if(!cacheDir.mkdirs()) { 
     cacheDir.mkdirs(); 
    } 
} 

public File getFile(String id) { 
    String filename = String.valueOf(id.hashCode()); 
    File f = new File(cacheDir, filename); 
    return f; 
} 
+1

女巫Android操作系统的版本,你测试? –

+0

我正在使用API​​ 23 – sayres

+3

可能您需要阅读本文。在尝试“使用”它之前,你必须在代码中请求许可:)。 https://developer.android.com/training/permissions/requesting.html –

回答

1

有3个东西,都在我的脑海检查:

  1. 使用,许可标记,里面明显标记(和不是应用程序标签)
  2. EACCESS可能由于fcImages目录不存在或者它是文件
  3. 权限的Android API 23必须要求运行

来源:(1)这是answer,而源(3)是这个answer

+0

使用权限是我清单的一面:' <使用权限android:name =“android.permission.WRITE_EXTERNAL_STORAGE” /> <使用的许可机器人:名称= “android.permission.INTERNET对”/> <应用 机器人:allowBackup = “真” 机器人:图标= “@ mip映射/ ic_launcher” 机器人:标签=“@ string/app_name“ android:roundIcon =”@ mipmap/ic_launcher_round“ android:supportsRtl =”true“ android:theme =”@ style/Theme.Design“> – sayres

+0

我不明白你是否解决了你的问题或者不。我对第二个原因很有信心(一个许可会抛出权限错误) –

+0

我有一个问题。我看到'fcImages'文件被创建 – sayres

0

如果你正在写的文件,应用程序的内部存储。试试这个:

例1:

java.io.File xmlFile = new java.io.File((getActivity() 
     .getApplicationContext().getFileStreamPath("FileName.xml") 
     .getPath())); 

也给下面的清单权限正确的方法:

例2:

<manifest> 
     <uses-permission 
     android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
     ... 
     <application> 
      ... 
      <activity> 
       ... 
      </activity> 
     </application> 
</manifest> 
相关问题