文件下载问题
Java codepackage y.b;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.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.ProgressBar;public class mainActivity 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; case 2: bar.setVisibility(View.GONE); 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("http://10.0.2.2:8080/dem/untitled.bmp"); // 创建HttpURLConnection HttpURLConnection urlcon = (HttpURLConnection) url .openConnection(); // 获得文件大小 // long TotalSize = Long.parseLong(urlcon // .getHeaderField("Content-Length")); // 获得文件大小 int fileLength = urlcon.getContentLength(); // 获得输入流 InputStream is = urlcon.getInputStream(); // 创建文件 File file = new File("/mnt/sdcard/untitled.bmp"); // 如果存在则删除 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); Message m2 = handler.obtainMessage(); m2.what = 1; // 提示已下载百分之多少 m2.arg1 = downsize * 100 / fileLength; m2.sendToTarget(); } // 清除缓存 output.flush(); } catch(Exception e) { e.printStackTrace(); } finally { try { // 关闭输出流 output.close(); } catch(Exception e) { e.printStackTrace(); } Message m2 = handler.obtainMessage(); m2.what = 2; m2.sendToTarget(); } } }).start(); }}