CreateNewFile - open failed: 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();
    }
}

Каждый раз он "Делает диски", каталог не остается или что-то еще. Когда он попадает в myFile.createNewFile(); он дает сообщение об ошибке "open failed: 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(...);
}

Я думал, что должен использовать тот же холст для растрового изображения, но это вызвало сбой, поэтому я пишу одну и ту же информацию на оба холста. Итак... я не знаю, связано ли это с проблемой или совершенно другой плохой проблемой или что.

Изучал всевозможные вопросы, которые казались похожими, но не могли найти решений, которые работали для меня. Я пытался решить это уже несколько дней. Кто-нибудь знает, что происходит не так?

Спасибо

Ответы

Ответ 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");