Android - загрузка файла, java.io.FileNotFoundException - PullRequest
0 голосов
/ 03 февраля 2012

Я могу быть далеко отсюда, но я пытаюсь загрузить файл и сохранить его в папке загрузок на моем телефоне. Я получаю ошибку "java.io.FileNotFoundException", потому что файл не существует, потому что я пытаюсь загрузить его ... что я делаю не так?

String PATH = Environment.getExternalStorageDirectory() + "/download/";
File dir = new File(PATH);
dir.mkdirs();

File outputFile = new File(dir, "downloadFile");
FileOutputStream fos = new FileOutputStream(outputFile);

Это терпит неудачу, со следующим:

java.io.FileNotFoundException: /mnt/sdcard/download/downloadFile (Permission denied)

Я использую разрешения WRITE_EXTERNAL_STORAGE and READ_EXTERNAL_STORAGE ....

Ответы [ 3 ]

2 голосов
/ 03 февраля 2012

Пожалуйста, попробуйте следующий обновленный код,

String PATH = Environment.getExternalStorageDirectory() + "/download";
        File dir = new File(PATH);
        dir.mkdirs();

        File outputFile = new File(dir, "downloadFile");
        if ( !outputFile.exists() ) 
        {
             outputFile.create();
        }
        FileOutputStream fos = new FileOutputStream(outputFile);

После загрузки есть знак "/".Таким образом, Android думает, что вы создаете рекурсивный каталог.При использовании mkdirs () вы не можете создавать рекурсивные каталоги.

Вы также можете проверить мой ответ на то же самое в Java ME здесь .

0 голосов
/ 03 февраля 2012

Добавить разрешение на запись внешней памяти в ваш файл манифеста.

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

0 голосов
/ 03 февраля 2012

Здесь вы хотите сделать директой?если папка загрузки уже есть, используйте этот код напрямую.

// create a File object for the parent directory
File Directory = new File("/sdcard/download/");

Directory.mkdirs();
// create a File object for the output file
File outputFile = new File(Directory, downloadFile);
// now attach the OutputStream to the file object, instead of a String representation
FileOutputStream fos = new FileOutputStream(outputFile);

Возможно, было бы целесообразно использовать Environment.getExternalStorageDirectory () для получения каталога "SD-карта", так как это может изменить

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...