public static void downFile(final String url){ new Thread(){ public void run(){ FileOutputStream os=null; try{ InputStream input=null; URLConnection httpUrlConnection= new URL(url).openConnection(); //int contentLength = httpUrlConnection.getContentLength(); input =httpUrlConnection.getInputStream(); File file = new File("C:\\Users\\Administrator\\Desktop\\Apknew.apk"); //如果目标文件已经存在,则删除。产生覆盖旧文件的效果 if(file.exists()) { file.delete(); } os = new FileOutputStream(file); byte[] buffer = new byte[4*1024]; // 读取到的数据长度 int len; while((len=input.read(buffer)) != -1){ os.write(buffer,0,len); //这里不能写成os.write(buffer) } os.flush(); os.close(); input.close();//这里一定不能忘记关闭输入流 //Log.v("cmd", "文件下载完毕,路径为:"+file.getAbsolutePath()); //update(); System.out.println("下载完毕"); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }finally{ } } }.start(); }
最近做项目用到文件下载,于是乎百度了N多下载代码,然后照抄,我这里是用来下载apk的,反复多次都是文件可以下载,但安装apk是出现解析包错误。经耐心检查发现两处错误
!1、input输入流忘记关闭了
2、os.write(buffer,0,len)写成了os.write(buffer) 百度出来的好多都是这样写的,而且Eclipse也不报错 究竟什么原因期待大神指点啊!
原文地址:http://blog.csdn.net/shengfakun1234/article/details/31017107