尽管在
Java应用程序中可以正常工作,但是在
Android中恢复下载的代码无法正常工作.在这里我试图下载一个zip文件,它将恢复下载,但最终的结果是无效的zip文件.
- BufferedInputStream in = null;
- FileOutputStream fos = null;
- BufferedOutputStream bout=null;
- try {
- downloaded=0;
- HttpURLConnection connection = (HttpURLConnection) url.openConnection();
- if(ISSUE_DOWNLOAD_STATUS.intValue()==ECMConstant.ECM_DOWNLOADING){
- File file=new File(DESTINATION_PATH);
- if(file.exists()){
- downloaded = (int) file.length();
- }
- }
- connection.setRequestProperty("Range","bytes=" + downloaded + "-");
- connection.connect();
- size=connection.getContentLength();
- Dialog.setMax(size);
- in = new BufferedInputStream(connection.getInputStream());
- fos=(downloaded==0)? new FileOutputStream(DESTINATION_PATH): new FileOutputStream(DESTINATION_PATH,true);
- bout = new BufferedOutputStream(fos,1024);
- byte[] data = new byte[1024];
- int x = 0;
- while ((x = in.read(data,1024)) >= 0) {
- bout.write(data,x);
- downloaded += x;
- System.out.println(downloaded);
- onProgressUpdate((int)(downloaded*100/size));
- }
- succes=true;
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- try {
- in.close();
- bout.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
谢谢.
解决方法
- HttpURLConnection connection = (HttpURLConnection) url.openConnection();
- int buf = 1024;
- if (ISSUE_DOWNLOAD_STATUS.intValue() == ECMConstant.ECM_DOWNLOADING) {
- File file = new File(DESTINATION_PATH);
- if (file.exists()) {
- downloaded = (int) file.length();
- connection.setRequestProperty("Range","bytes=" + file.length() + "-");
- }
- } else {
- connection.setRequestProperty("Range","bytes=" + downloaded + "-");
- }
- connection.setDoInput(true);
- connection.setDoOutput(true);
- progressBar.setMax(connection.getContentLength());
- in = new BufferedInputStream(connection.getInputStream());
- fos = new FileOutputStream(DESTINATION_PATH,downloaded == 0 ? false : true);
- bout = new BufferedOutputStream(fos,buf);
- byte[] data = new byte[buf];
- while ((int x = in.read(data,buf)) >= 0) {
- bout.write(data,x);
- downloaded += x;
- progressBar.setProgress(downloaded);
- }