文件下载 进度条

  1. package a.a;  
  2.   
  3. import java.io.File;  
  4. import java.io.FileOutputStream;  
  5. import java.io.InputStream;  
  6. import java.io.OutputStream;  
  7. import java.net.HttpURLConnection;  
  8. import java.net.URL;  
  9. import android.app.Activity;  
  10. import android.os.Bundle;  
  11. import android.os.Handler;  
  12. import android.os.Message;  
  13. import android.util.Log;  
  14. import android.view.View;  
  15. import android.view.View.OnClickListener;  
  16. import android.widget.Button;  
  17. import android.widget.ProgressBar;  
  18.   
  19. public class a extends Activity {  
  20.     Button b;  
  21.     OutputStream output;// 输入出流  
  22.     ProgressBar bar;  
  23.   
  24.     @Override  
  25.     public void onCreate(Bundle savedInstanceState) {  
  26.         super.onCreate(savedInstanceState);  
  27.         setContentView(R.layout.main);  
  28.         b = (Button) findViewById(R.id.btn);  
  29.         bar = (ProgressBar) findViewById(R.id.bar);  
  30.         b.setOnClickListener(new OnClickListener() {  
  31.             @Override  
  32.             public void onClick(View v) {  
  33.                 down();  
  34.             }  
  35.         });  
  36.     }  
  37.   
  38.     Handler handler = new Handler() {  
  39.   
  40.         @Override  
  41.         public void handleMessage(Message msg) {  
  42.             // TODO Auto-generated method stub  
  43.             super.handleMessage(msg);  
  44.             switch(msg.what) {  
  45.                 case 0:  
  46.                     bar.setVisibility(View.VISIBLE);  
  47.                     break;  
  48.                 case 1:  
  49.                     bar.setProgress(msg.arg1);  
  50.                     break;  
  51.             }  
  52.         }  
  53.     };  
  54.   
  55.     // 下载方法 必须放在单独的线程里  
  56.     private void down() throws RuntimeException {  
  57.         new Thread(new Runnable() {  
  58.             @Override  
  59.             public void run() {  
  60.                 try {  
  61.                     Message m = handler.obtainMessage();  
  62.                     m.what = 0;  
  63.                     m.sendToTarget();  
  64.                     // 创建URL 写入下载地址  
  65.                     URL url = new URL("下载路径");  
  66.                     // 创建HttpURLConnection  
  67.                     HttpURLConnection urlcon = (HttpURLConnection) url  
  68.                             .openConnection();  
  69.                     //或者上两句使用URLConnection connection = new URL("下载路径").  
  70.                     //openConnection(); 下面的urlcon 换成connection   
  71.                     // 获得文件大小  
  72.                     long TotalSize = Long.parseLong(urlcon  
  73.                             .getHeaderField("Content-Length"));  
  74.                     // 获得文件大小  
  75.                     int fileLength = urlcon.getContentLength();  
  76.                     // 获得输入流  
  77.                     InputStream is = urlcon.getInputStream();  
  78.                     // 创建目录  
  79.                     File dir = new File("/mnt/sdcard/abc");  
  80.                     dir.mkdir();  
  81.                     // 创建文件  
  82.                     File file = new File("/mnt/sdcard/abc/asd.doc");  
  83.                     // 如果存在则删除  
  84.                     if(file.exists())  
  85.                         file.delete();  
  86.                     // 创建文件  
  87.                     file.createNewFile();  
  88.                     // 创建文件输入流  
  89.                     output = new FileOutputStream(file);  
  90.                     byte buffer[] = new byte[4 * 1024];  
  91.                     // 已下载  
  92.                     int downsize = 0;  
  93.   
  94.                     while(true) {  
  95.                         int down = is.read(buffer);  
  96.                         if(down == -1) {  
  97.                             break;  
  98.                         }  
  99.                         downsize += down;  
  100.                         output.write(buffer, 0, down);  
  101.                         Message m2 = handler.obtainMessage();  
  102.                         m2.what = 1;  
  103.                         // 提示已下载百分之多少  
  104.                         m2.arg1 = downsize * 100 / fileLength;  
  105.                         m2.sendToTarget();  
  106.                     }  
  107.                     // 清除缓存  
  108.                     output.flush();  
  109.                 }  
  110.                 catch(Exception e) {  
  111.                     // TODO Auto-generated catch block  
  112.                     e.printStackTrace();  
  113.                 }  
  114.                 finally {  
  115.                     try {  
  116.                         // 关闭输出流  
  117.                         output.close();  
  118.                     }  
  119.                     catch(Exception e) {  
  120.                         // TODO Auto-generated catch block  
  121.                         e.printStackTrace();  
  122.                     }  
  123.                 }  
  124.             }  
  125.         }).start();  
  126.     }  
  127. }  
所需的权限
[html]  view plain copy
  1. <uses-permission android:name="android.permission.INTERNET" />  
  2. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值