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

时间:2014-03-16 09:17:20

标签: java android

我无法弄清楚这里出了什么问题......我已经尝试过更简洁地写这个,但是没有用。在阅读了有关此问题的其他建议后,我输入了所有额外的字符串。没有帮助。不知道发生了什么。它可能与权限相关吗? 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(...);
}

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

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

由于

3 个答案:

答案 0 :(得分:18)

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

答案 1 :(得分:8)

可能的问题:

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

textField.text

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

答案 2 :(得分:0)

只需更改代码的开头:

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");