createNewFile – 打开失败:ENOENT(没有这样的文件或目录)

我无法弄清楚这里出了什么问题…我已经尝试过更简洁地写这个,但是没有用。 在阅读了有关此问题的其他建议后,我输入了所有额外的字符串。 没有帮助。 不知道发生了什么。 它可能与权限相关吗? AFAIK我正在尝试写入内部存储器并且不需要特殊权限?

public void outputBitmap(){ String path = Environment.DIRECTORY_PICTURES.toString(); File folder = new File(path + "/Blabla"); String filename = new SimpleDateFormat("yyMMddHHmmss").format(Calendar.getInstance().getTime()) + ".png"; try { if (!folder.exists()) { folder.mkdirs(); System.out.println("Making dirs"); } File myFile = new File(folder.getAbsolutePath(), filename); myFile.createNewFile(); FileOutputStream out = new FileOutputStream(myFile); myBitmap.compress(Bitmap.CompressFormat.PNG, 100, out); out.flush(); out.close(); } catch (Exception e) { System.out.println(e.getMessage()); e.printStackTrace(); } } 

它每次都是“制作dirs”,目录不是留下来的,或者其他东西。 当它到达myFile.createNewFile(); 它给出错误消息“打开失败:ENOENT(没有这样的文件或目录)”

不确定它是否相关,但我尝试输出的信息来自:

 protected void onDraw(Canvas canvas) { super.onDraw(canvas); myBitmap = Bitmap.createBitmap(viewWidth, viewHeight, Bitmap.Config.RGB_565); Canvas pngCanvas = new Canvas(myBitmap); ...[some maths and stuff] canvas.drawLine(...); pngCanvas.drawLine(...); } 

我以为我应该能够为位图使用相同的canvas,但这会导致崩溃,所以我将相同的信息写入两个canvas。 所以……我不知道这是与问题有关还是与完全不同的坏问题有关。

一直在搜索似乎相似的各种问题,但找不到任何适合我的解决方案。 我一直试图解决这个问题好几天了。 谁知道出了什么问题?

谢谢

您没有正确使用Environment.DIRECTORY_PICTURES。 它本身不是文件夹,您需要将其用作getExternalStoragePublicDirectory()方法的参数。 点击此处: http : //developer.android.com/reference/android/os/Environment.html#getExternalStoragePublicDirectory(java.lang.String)

可能的问题:

确保您在清单文件中提供了以下必需的权限。

  

对于Marhsmallow设备,请确保设备用户也授予了“联系人组权限”。
参考: http : //developer.android.com/training/permissions/requesting.html

只需更改代码的开头即可:

 public void outputBitmap(){ String path = Environment.DIRECTORY_PICTURES.toString(); File folder = new File(path + "/Blabla"); 

对此:

 public void outputBitmap(){File folder = new File(getActivity().getExternalFilesDir(null) + IMAGE_DIRECTORY + "whatever you want for your directory name");