Открыть не удалось: ENOENT (нет такого файла или каталога) даже с разрешениями


Я знаю, что есть много других постов с этой проблемой, но ни один, кажется, не решает мою. Я пытаюсь создать файл на Enviroment.DIRECTORY_DOWNLOADS, отправить этот файл по электронной почте, а затем удалить его. Однако я получаю ошибку при инициализации выходного потока файла fos = new FileOutputStream(file);.

Ошибка, которую я получаю:

java.io.FileNotFoundException: /CheckListReport_2015_07_19.txt: open failed: ENOENT (No such file or directory)

В моем манифесте у меня есть <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> вне тега приложений

Ниже приведен код:

    String report = new SimpleDateFormat("yyyy_MM_dd").format(Calendar.getInstance().getTime());
    File path = Environment.getExternalStoragePublicDirectory(
            Environment.DIRECTORY_DOWNLOADS);

    File file = new File(path, "CheckListReport_" + report + ".txt");

    FileOutputStream fos = null;

    try {
        fos = new FileOutputStream(file);

        String lineToWrite;
        for (Map.Entry entry : CheckboxHandler.data.entrySet()) {
            lineToWrite = entry.getKey() + ", " + entry.getValue() + "n";
            fos.write(lineToWrite.getBytes());
        }
    } catch (IOException e) {
        e.printStackTrace();
    }

    String subject = "CheckListReport_" + report + ".txt";

    Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
    emailIntent.setType("text/plain");
    emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[]{"checklistreportdata@gmail.com"});
    emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, subject);
    emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse(new File(path, "CheckListReport_" + report + ".txt").toString()));
    startActivity(Intent.createChooser(emailIntent, "Send mail..."));

    file.delete();
1 3

1 ответ:

Используйте это разрешение:

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

Попробуйте этот код для чтения файлов из каталога Download:

File path = Environment.getExternalStoragePublicDirectory(
        Environment.DIRECTORY_DOWNLOADS);

File file = new File(path, "CheckListReport_" + report + ".txt");

Измените это:

emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://" + Environment.DIRECTORY_DOWNLOADS + "/CheckListReport_" + report + ".txt"));

Кому:

emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse(new File(path, "CheckListReport_" + report + ".txt").toString()));