Java Android:将位图保存到手机存储器
我在将位图保存到手机存储器时遇到问题。似乎我无法创建新文件。我在java.io.File.createNewFile(File.java:940)处获得异常-->java.io.exception:open失败:EAccess(权限被拒绝) 正在使用的strFileName是*/storage/sdcard0/SpenSDK/images/testimage\u 00* 奇怪的是,这段代码在以前的项目中运行。我想知道是否有人知道为什么会抛出这个异常 以下是以PNG格式保存到手机存储器中的代码Java Android:将位图保存到手机存储器,java,android,bitmap,Java,Android,Bitmap,我在将位图保存到手机存储器时遇到问题。似乎我无法创建新文件。我在java.io.File.createNewFile(File.java:940)处获得异常-->java.io.exception:open失败:EAccess(权限被拒绝) 正在使用的strFileName是*/storage/sdcard0/SpenSDK/images/testimage\u 00* 奇怪的是,这段代码在以前的项目中运行。我想知道是否有人知道为什么会抛出这个异常 以下是以PNG格式保存到手机存储器中的代码 p
private boolean saveBitmapPNG(String strFileName, Bitmap bitmap){
if(strFileName==null || bitmap==null){
System.out.println("!!!error saving image - false in SavePNG - NAME OR BITMAP");
return false;
}
boolean bSuccess1 = false;
boolean bSuccess2;
boolean bSuccess3;
File saveFile = new File(strFileName);
if(saveFile.exists()) {
if(!saveFile.delete())
System.out.println("!!!error saving image - false in SavePNG - could not delete existing");
return false;
}
try {
bSuccess1 = saveFile.createNewFile();//----------------->EXCEPTION IS THROWN HERE
} catch (IOException e1) {
System.out.println("!!!error saving image - false in SavePNG - could not create new file");
e1.printStackTrace();
}
OutputStream out = null;
try {
out = new FileOutputStream(saveFile);
bSuccess2 = bitmap.compress(CompressFormat.PNG, 100, out); //----------------->EXCEPTION IS THROWN HERE
} catch (Exception e) {
e.printStackTrace();
System.out.println("!!!error saving image - false in SavePNG - could not compress");//-->3
bSuccess2 = false;
}
try {
if(out!=null) //----------------->OUT == null here
{
out.flush();
out.close();
bSuccess3 = true;
}
else
System.out.println("!!!error saving image - false in SavePNG - could not close");//-->4
bSuccess3 = false;
} catch (IOException e) {
e.printStackTrace();
System.out.println("!!!error saving image - false in SavePNG - could not close (exception");
bSuccess3 = false;
}finally
{
if(out != null)
{
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return (bSuccess1 && bSuccess2 && bSuccess3);
}
您是否忘记了写入外部存储的权限
您的硬编码路径是否真的指向sd卡?您是否忘记了
写入外部存储
权限
您的硬编码路径是否真的指向sd卡?您需要
写入外部存储权限。您还可以删除createNewFile。如果文件不存在,将创建您需要写入外部存储
权限。您还可以删除createNewFile。如果文件不存在,将创建该文件在清单文件中添加此权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
查看链接以了解更多信息
在清单文件中添加此权限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
查看链接以了解更多信息
除了前面的答案中给出的权限外,您还应该使用方法获取SD卡的路径
Environment.getExternalStorageDirectory();
并将所需的目录附加到返回的路径。除了在前面的答案中给出的权限之外,您还应该使用方法获取SD卡的路径
Environment.getExternalStorageDirectory();
并将所需目录附加到返回的路径。他为什么要删除createNewFile。要求我澄清。“正在使用的strFileName是*/storage/sdcard0/SpenSDK/images/testimage_00”一词的作者同意@blackbelt,但他有此回报(bsucces1&&bsucces2&&bsucces3);他总是可以返回bsucces2&&bsucces3;他为什么要摆脱createNewFile。要求我澄清。“正在使用的strFileName是*/storage/sdcard0/SpenSDK/images/testimage_00”一词的作者同意@blackbelt,但他有此回报(bsucces1&&bsucces2&&bsucces3);他总是可以返回bsucces2&&bsucces3;谢谢你的快速回复!真不敢相信我忘了更新清单。谢谢你的快速回复!我真不敢相信我忘了更新舱单。