Загрузка файлов из интернета

Ответить
hard
Сообщения: 44
Зарегистрирован: 13 сен 2013, 14:21

Загрузка файлов из интернета

Сообщение hard » 17 окт 2013, 07:50

В интернете много разных примеров как загрузить файл из интернета, вот один из примеров:

Код: Выделить всё

try {
        //set the download URL, a url that points to a file on the internet
        //this is the file to be downloaded
        URL url = new URL("http://somewhere.com/some/webhosted/file");

        //create the new connection
        HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();

        //set up some things on the connection
        urlConnection.setRequestMethod("GET");
        urlConnection.setDoOutput(true);

        //and connect!
        urlConnection.connect();

        //set the path where we want to save the file
        //in this case, going to save it on the root directory of the
        //sd card.
        File SDCardRoot = Environment.getExternalStorageDirectory();
        //create a new file, specifying the path, and the filename
        //which we want to save the file as.
        File file = new File(SDCardRoot,"somefile.ext");

        //this will be used to write the downloaded data into the file we created
        FileOutputStream fileOutput = new FileOutputStream(file);

        //this will be used in reading the data from the internet
        InputStream inputStream = urlConnection.getInputStream();

        //this is the total size of the file
        int totalSize = urlConnection.getContentLength();
        //variable to store total downloaded bytes
        int downloadedSize = 0;

        //create a buffer...
        byte[] buffer = new byte[1024];
        int bufferLength = 0; //used to store a temporary size of the buffer

        //now, read through the input buffer and write the contents to the file
        while ( (bufferLength = inputStream.read(buffer)) > 0 ) {
                //add the data in the buffer to the file in the file output stream (the file on the sd card
                fileOutput.write(buffer, 0, bufferLength);
                //add up the size so we know how much is downloaded
                downloadedSize += bufferLength;
                //this is where you would do something to report the prgress, like this maybe
                updateProgress(downloadedSize, totalSize);

        }
        //close the output stream when done
        fileOutput.close();

//catch some possible errors...
} catch (MalformedURLException e) {
        e.printStackTrace();
} catch (IOException e) {
        e.printStackTrace();
}
мне кажется этот код не совсем верный, ведь если произойдет какая то ошибка выходной поток и входной поток не будут закрыты???
Возможно правильнее после catch добавить:

Код: Выделить всё

} finally {
			fileOutput.close();
			inputStream.close();
		}

и еще один вопрос: когда у нас срабатывает строка кода InputStream inputStream = urlConnection.getInputStream();
у нас ведь файл в ней не загружается?! Он начинает загружаться постепенно с записью на флешку?!

Аватара пользователя
trew
Сообщения: 450
Зарегистрирован: 28 сен 2013, 17:34

Re: Загрузка файлов из интернета

Сообщение trew » 17 окт 2013, 09:43

Код: Выделить всё

} finally {
			fileOutput.close();
			inputStream.close();
		}
А если всё хорошо загрузилось, Вы получите ошибку в finally. Т.к. у в коде два раза написано fileOutput.close();

Либо закрывать только в разделе finally, либо try оставляем как есть а раздел finally перепишем по другому:

Код: Выделить всё

} finally {	
if (fileOutput== null) {
fileOutput.close();}

if (inputStream== null) {
inputStream.close();}
		}
В oc windows файлы копируются во временную папку, а затем переносятся в директорию пользователя.
В android наверно также, в цикле while во временное хранилище, а затем куда вы указали.
Когда выкладываете код на форум - код оформляйте. Редактор - поищите слова Geshi Syntax -Java. (или xml)
Свои сообщения можно редактировать - кнопка edit.

hard
Сообщения: 44
Зарегистрирован: 13 сен 2013, 14:21

Re: Загрузка файлов из интернета

Сообщение hard » 18 окт 2013, 12:23

на счет закрытия только в финале, я это и имел ввиду)))

а вот на счет загрузки, я спрашивал выполнив строку кода inputStream = urlConnection.getInputStream(); мы уже имеем у себя файл или нет.

Аватара пользователя
trew
Сообщения: 450
Зарегистрирован: 28 сен 2013, 17:34

Re: Загрузка файлов из интернета

Сообщение trew » 18 окт 2013, 12:34

hard писал(а):на счет закрытия только в финале, я это и имел ввиду)))

а вот на счет загрузки, я спрашивал выполнив строку кода inputStream = urlConnection.getInputStream(); мы уже имеем у себя файл или нет.
Думаю, что InputStream это "просто" класс. Обозначили переменную inputStream с типом этого класса.

Мы что-то начинаем иметь когда начинаем использовать метод класса:
write(), который используется для записи единичного байта или массива байт.
или
read( ) для чтения единичного байта или массива байт.

А до этого, мы не читаем и не пишем файл.
Когда выкладываете код на форум - код оформляйте. Редактор - поищите слова Geshi Syntax -Java. (или xml)
Свои сообщения можно редактировать - кнопка edit.

Ответить