【问题标题】:createNewFile - open failed: ENOENT (No such file or directory)createNewFile - 打开失败:ENOENT(没有这样的文件或目录)
【发布时间】:2014-03-16 09:17:20
【问题描述】:

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

它每次都“制作目录”,目录没有保持制作,或者其他什么。当它到达 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(...);
}

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

一直在搜索各种看似相似的问题,但找不到任何适合我的解决方案。这几天我一直在努力解决这个问题。有谁知道怎么回事?

谢谢

【问题讨论】:

    标签: java android


    【解决方案1】:

    您没有正确使用 Environment.DIRECTORY_PICTURES。它本身不是一个文件夹,您需要将它用作 getExternalStoragePublicDirectory() 方法的参数。 在这里查看:http://developer.android.com/reference/android/os/Environment.html#getExternalStoragePublicDirectory(java.lang.String)

    【讨论】:

    • 非常感谢。将第一行更改为“文件夹 = 新文件(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + "/Whatever/");'然后它就消失了!再次感谢!
    • 哦,当我说“我正在尝试写入内部存储器并且不需要特殊权限时?”事实证明这也是错误的。我没有意识到在这种情况下“外部”是指程序外部而不是电话。所以我还必须将 '' 放入 AndroidManifest.xml 所以,只需添加这个额外的信息,以防其他人有同样的问题。
    【解决方案2】:

    可能的问题:

    确保您已在清单文件中授予以下所需权限。

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

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

    【讨论】:

      【解决方案3】:

      只需从这里更改代码的开头:

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

      【讨论】:

      • 你救了我亲
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-23
      • 2016-07-05
      • 2013-02-04
      • 1970-01-01
      相关资源
      最近更新 更多