Сохранение скачанного файла Android

184
05 февраля 2018, 04:44

Цель: скачать файл и сохранить в папке Downloads
При попытке открыть файл для записи таким способом

FileOutputStream output = openFileOutput(folder + "/" + name_pic, Context.MODE_PRIVATE);

Выдаёт мне такую ошибку:
E/Error:: File /storage/emulated/0/Download/picture.png contains a path separator
Как исправить? Вызываю класс так:

String url = "http://192.168.1.7/static/picture.png"; 
new DownloadFileFromURL().execute(url);

В манифесте прописаны права для INTERNET,WRITE_EXTERNAL_STORAGE и READ_EXTERNAL_STORAGE
За помощь буду очень благодарен

@SuppressLint("StaticFieldLeak")
class DownloadFileFromURL extends AsyncTask<String, String, String> {
    /**
     * Downloading file in background thread
     * */
    @Override
    protected String doInBackground(String... f_url) {
        int count;
        try {
            String root = Environment.getExternalStorageDirectory().toString();
            System.out.println("Downloading");
            URL url = new URL(f_url[0]);
            System.out.println(f_url[0]);
            URLConnection conection = url.openConnection();
            conection.connect();
            int lenghtOfFile = conection.getContentLength();
            InputStream input = new BufferedInputStream(url.openStream(), 8192);
            String folder = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).toString();
            String name_pic = "picture.png";
            //OutputStream output = new FileOutputStream(root+"/downloadedfile.jpg");
            Log.e("Status", "output not opened");
            FileOutputStream output = openFileOutput(folder + "/" + name_pic, Context.MODE_PRIVATE);
            Log.e("Status", "output opened");
            byte data[] = new byte[1024];
            long total = 0;
            while ((count = input.read(data)) != -1) {
                total += count;
                // writing data to file
                output.write(data, 0, count);
                //System.out.println(count);
            }
            // flushing output
            output.flush();
            // closing streams
            output.close();
            input.close();
            Log.e("e", "End");
        } catch (Exception e) {
            Log.e("Error: ", e.getMessage());
        }
        return null;
    }
    /**
     * After completing background task
     * **/
    @Override
    protected void onPostExecute(String file_url) {
        System.out.println("Downloaded");
        System.out.println(file_url);
    }
}
Answer 1

Нужно сделать, как в закомментированной строке

new FileOutputStream(folder + "/" + name_pic)

И запросить разрешение во время выполнения

ActivityCompat.requestPermissions(MainActivity.this,
            new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
            1);

Спасибо, woesss!

READ ALSO
Метод выполняющийся при коллизий box2d

Метод выполняющийся при коллизий box2d

Использую libgdx + box2dОбрабатываю коллизию тел через ContactListener, но для него приходится делать очень много проверок

195
Yii2. Git не видит изменения в js файле

Yii2. Git не видит изменения в js файле

Склонировал проект Yii2 себе на локальный компьютерРазвернул его, внес изменения в файл jquery

210
Личный кабинет Flask

Личный кабинет Flask

Пытаюсь реализовать вход в личный кабинетСхема входа следующая:

283
Как сделать сортировку при помощи JS? [дубликат]

Как сделать сортировку при помощи JS? [дубликат]

На данный вопрос уже ответили:

182