Я пытаюсь загрузить zip-файл в android, а затем извлечь zip-файл. Я отлаживаю свой код и возникает смешная проблема: Загруженный zip-файл немного больше исходного файла. И загруженный zip-файл не может быть распакован winrar. Говорят, что загруженный файл заканчивается ошибкой. (... Файл почтового индекса на моем сайте в порядке, я пытаюсь скачать с IE Это работает отлично) Ниже мой код:Как скачать zip-файл с java-кодом в android правильно?
public void download(final String url, final String savePath, final String saveName) {
new Thread(new Runnable() {
public void run() {
try {
sendMessage(FILE_DOWNLOAD_CONNECT);
URL sourceUrl = new URL(url);
URLConnection conn = sourceUrl.openConnection();
conn.connect();
InputStream inputStream = conn.getInputStream();
int fileSize = conn.getContentLength();
File savefilepath = new File(savePath);
if (!savefilepath.exists()) {
savefilepath.mkdirs();
}
File savefile = new File(savePath+saveName);
if (savefile.exists()) {
savefile.delete();
}
savefile.createNewFile();
FileOutputStream outputStream = new FileOutputStream(
savePath+saveName, true);
byte[] buffer = new byte[1024];
int readCount = 0;
int readNum = 0;
int prevPercent = 0;
while (readCount < fileSize && readNum != -1) {
readNum = inputStream.read(buffer);
if (readNum > -1) {
outputStream.write(buffer);
readCount = readCount + readNum;
int percent = (int) (readCount * 100/fileSize);
if (percent > prevPercent) {
sendMessage(FILE_DOWNLOAD_UPDATE, percent,
readCount);
prevPercent = percent;
}
}
}
outputStream.flush();
outputStream.close();
inputStream.close();
//Thread.sleep(50);
sendMessage(FILE_DOWNLOAD_COMPLETE, savePath);
} catch (Exception e) {
sendMessage(FILE_DOWNLOAD_ERROR, e);
}
}
}).start();
}
Кто-нибудь знает эту проблему?
Я попытался решения, описанные раньше: [ссылка] (http://stackoverflow.com/questions/9324103/download-and-extract-zip-file-in-android). Но та же проблема есть. – David
Еще одна забавная проблема. Загруженный размер файла изменится после повторной загрузки (не каждый раз). Я предполагаю, что это может быть вызвано стратегией буфера файлов в Android. Поэтому я пытаюсь //Thread.sleep(50); чтобы андроид полностью сохранил файл. Но, похоже, это не сработает. (Почтовый файл необходимо извлечь сразу после загрузки.) – David