загрузить zip-файл с помощью Java?

Я загружаю zip-файл с веб-сервера с помощью Java, но так или иначе я освобождаю приблизительно 2 КБ в каждом файле. Я не знаю, почему, так как тот же код хорошо работает с другими форматами, например, текст, mp3 и дополнительный. какая-либо справка ценится? вот мой код.

public void download_zip_file(String save_to) {
    try {
        URLConnection conn = this.url.openConnection();
        conn.setDoOutput(true);
        conn.setDoInput(true);
        conn.setRequestProperty("content-type", "binary/data");
        InputStream in = conn.getInputStream();
        FileOutputStream out = new FileOutputStream(save_to + "tmp.zip");

        byte[] b = new byte[1024];
        int count;

        while ((count = in.read(b)) > 0) {
            out.write(b, 0, count);
        }
        out.close();
        in.close();

    } catch (IOException e) {
        e.printStackTrace();
    }
}
8
задан Jonik 17 April 2010 в 10:02
поделиться

6 ответов

Это должно быть следующим образом:

while ((count = in.read(b)) >= 0)

in.read может вернуть 0 .

3
ответ дан 5 December 2019 в 23:14
поделиться

Однажды у меня возникла проблема с загрузкой zip-файлов с http, которая, как оказалось, заключалась в том, что мои загрузки включали заголовки http в начале, но из-за этого мои файлы становились немного больше, а не меньше, так что у вас, вероятно, нет этой проблемы.

В качестве примечания вы можете рассмотреть возможность использования Apache Commons Net для загрузки связанных приложений - это действительно здорово.

0
ответ дан 5 December 2019 в 23:14
поделиться

Несколько лет назад я помню, как столкнулся с проблемой старой версии Tomcat (5.5.25 для памяти), которая приводила к усечению больших загрузок. Мы исправили это, обновив до 5.5.27. Я также помню, что такая же проблема была обнаружена и исправлена ​​в раннем выпуске Tomcat 6.0.

Если это вас задело, взгляните на журналы изменений Tomcat.

0
ответ дан 5 December 2019 в 23:14
поделиться

Только zip-файлы, да? Очень странно. Это с какого сервера или только с этого? Если вы переименуете файл (измените расширение), у вас возникнет такая же проблема? Какие байты отсутствуют? Вы уверены, что это последние 2 Кбайта, а не какой-то фрагмент из середины / и т. Д.?

0
ответ дан 5 December 2019 в 23:14
поделиться

Попробуйте удалить строки:

conn.setDoOutput(true);
conn.setDoInput(true);
conn.setRequestProperty("content-type", "binary/data");
​​
0
ответ дан 5 December 2019 в 23:14
поделиться

Вставьте out.flush () сразу после раздела « while ((count = in.read (b))> 0) {...} » и перед разделом out. close () .

2
ответ дан 5 December 2019 в 23:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: