Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Как унать скачен ли весь файл?


Автор: DenWPF 17.5.2011, 18:06
Код

_inputStream = url.openStream();
BufferedInputStream bis = new BufferedInputStream(_inputStream);

в BufferedInputStream постоянно записывается файл (как я понимаю) как понять что файл закачался полностью.

Я думаю должна быть какая то конечная точка у файла. 
как её определить?

Автор: newinjava 17.5.2011, 18:15
На сколько я знаю, у Стрима не узнать размер файла!

Но во если у вас есть доступ к файлу, то можно так:
Код

File f = new File(url);
_inputStream = new FileInputStream(f);
BufferedInputStream bis = new BufferedInputStream(_inputStream);

// Размер
f.length();

Автор: XoJIoD 17.5.2011, 18:32
Вот попробуй.

Код

public class CopyStream {
    public int copy(InputStream in, OutputStream out) throws IOException {
        int size = 0;
        byte[] buff = new byte[1024];
        int l = 0;
        while ((l = in.read(buff)) != -1) {
            out.write(buff, 0, l);
            size += l;
        }
        return size;
    }

    public static void main(String[] args) throws Exception {
        URL url = new URL(args[0]);
        InputStream _inputStream = url.openStream();
        BufferedInputStream bis = new BufferedInputStream(_inputStream);
        OutputStream out = new ByteArrayOutputStream();
        int size = new CopyStream().copy(bis, out);
        System.out.print("size:" + size);
    }
}

Автор: COVD 17.5.2011, 20:40
Цитата

Я думаю должна быть какая то конечная точка у файла. 
как её определить?


Эта "точка" - конец файла, EOF.
В конструкции, приведенной XoJIoD , конец файла проверяется условием (.. != -1). Любой сбой во время чтения повлечет за собой IOException, т.е. условие не сработает.

Код

while ((l = in.read(buff)) != -1) {


Автор: newinjava 17.5.2011, 22:53
Цитата(XoJIoD @  17.5.2011,  18:32 Найти цитируемый пост)
Вот попробуй.


Я думаю это увеличит время скачки почти в два раза. Сначало узнаём размер, а потом этим же способом качаем файл? Мне кажется это не решение.

Как я понял, этот файл на удалённом компе, по этому просто так размер не узнать. Если конечно удалённый комп не предлагает таких служб как FTP или ещё что-нить для работы с файлами.

Автор: DenWPF 17.5.2011, 23:12
Файл это mp3 с контакта.

Автор: Skipy 18.5.2011, 10:15
Читать блоками до возврата -1. Самое простое и эффективное. http://skipy-ru.livejournal.com/3621.html

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)