FileNotFoundException:EACCES(权限被拒绝)
FileNotFoundException:EACCES (Permission denied)
我从我的服务获取数据:
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,然后我将其转换为输入流 :
byte[] tmp = Base64.decode(temp, Base64.DEFAULT);
InputStream is = new ByteArrayInputStream(tmp);
我想通过 outputStream 将其写入 File :
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;
}
我想到要检查的 3 件事:
- uses-permission 标签在清单标签内(而不是应用程序标签)
- EACCESS可能是因为
fcImages
目录不存在,或者是一个文件
- Androidapi23 的权限必须在运行时请求
(1) 的来源是这个 answer, while source for (3) is this answer
如果您正在将文件写入应用程序的内部存储。试试这个:
示例 1:
java.io.File xmlFile = new java.io.File((getActivity()
.getApplicationContext().getFileStreamPath("FileName.xml")
.getPath()));
另外给manifest权限正确的方式如下:
示例 2:
<manifest>
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
...
<application>
...
<activity>
...
</activity>
</application>
</manifest>
我从我的服务获取数据:
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,然后我将其转换为输入流 :
byte[] tmp = Base64.decode(temp, Base64.DEFAULT);
InputStream is = new ByteArrayInputStream(tmp);
我想通过 outputStream 将其写入 File :
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;
}
我想到要检查的 3 件事:
- uses-permission 标签在清单标签内(而不是应用程序标签)
- EACCESS可能是因为
fcImages
目录不存在,或者是一个文件 - Androidapi23 的权限必须在运行时请求
(1) 的来源是这个 answer, while source for (3) is this answer
如果您正在将文件写入应用程序的内部存储。试试这个:
示例 1:
java.io.File xmlFile = new java.io.File((getActivity()
.getApplicationContext().getFileStreamPath("FileName.xml")
.getPath()));
另外给manifest权限正确的方式如下:
示例 2:
<manifest>
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
...
<application>
...
<activity>
...
</activity>
</application>
</manifest>