- package a.a;
- import java.io.File;
- import java.io.FileOutputStream;
- import java.io.InputStream;
- import java.io.OutputStream;
- import java.net.HttpURLConnection;
- import java.net.URL;
- import android.app.Activity;
- import android.os.Bundle;
- import android.os.Handler;
- import android.os.Message;
- import android.util.Log;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.Button;
- import android.widget.ProgressBar;
- public class a extends Activity {
- Button b;
- OutputStream output;// 输入出流
- ProgressBar bar;
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
- b = (Button) findViewById(R.id.btn);
- bar = (ProgressBar) findViewById(R.id.bar);
- b.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- down();
- }
- });
- }
- Handler handler = new Handler() {
- @Override
- public void handleMessage(Message msg) {
- // TODO Auto-generated method stub
- super.handleMessage(msg);
- switch(msg.what) {
- case 0:
- bar.setVisibility(View.VISIBLE);
- break;
- case 1:
- bar.setProgress(msg.arg1);
- break;
- }
- }
- };
- // 下载方法 必须放在单独的线程里
- private void down() throws RuntimeException {
- new Thread(new Runnable() {
- @Override
- public void run() {
- try {
- Message m = handler.obtainMessage();
- m.what = 0;
- m.sendToTarget();
- // 创建URL 写入下载地址
- URL url = new URL("下载路径");
- // 创建HttpURLConnection
- HttpURLConnection urlcon = (HttpURLConnection) url
- .openConnection();
- //或者上两句使用URLConnection connection = new URL("下载路径").
- //openConnection(); 下面的urlcon 换成connection
- // 获得文件大小
- long TotalSize = Long.parseLong(urlcon
- .getHeaderField("Content-Length"));
- // 获得文件大小
- int fileLength = urlcon.getContentLength();
- // 获得输入流
- InputStream is = urlcon.getInputStream();
- // 创建目录
- File dir = new File("/mnt/sdcard/abc");
- dir.mkdir();
- // 创建文件
- File file = new File("/mnt/sdcard/abc/asd.doc");
- // 如果存在则删除
- if(file.exists())
- file.delete();
- // 创建文件
- file.createNewFile();
- // 创建文件输入流
- output = new FileOutputStream(file);
- byte buffer[] = new byte[4 * 1024];
- // 已下载
- int downsize = 0;
- while(true) {
- int down = is.read(buffer);
- if(down == -1) {
- break;
- }
- downsize += down;
- output.write(buffer, 0, down);
- Message m2 = handler.obtainMessage();
- m2.what = 1;
- // 提示已下载百分之多少
- m2.arg1 = downsize * 100 / fileLength;
- m2.sendToTarget();
- }
- // 清除缓存
- output.flush();
- }
- catch(Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- finally {
- try {
- // 关闭输出流
- output.close();
- }
- catch(Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
- }).start();
- }
- }
- <uses-permission android:name="android.permission.INTERNET" />
- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>