读书人

文件上载有关问题

发布时间: 2012-09-14 11:53:44 作者: rapoo

文件下载问题

Java code
package 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();    }} 


运行起来没有任何问题
但是下载完成后文件一定损坏无法打开

[解决办法]
URLConnection c=new URL(url).openConnection();
is=c.getInputStream();
fos=new FileOutputStream(file);
byte[] buffer=new byte[1024*100];
while((length=is.read(buffer))>0){
fos.write(buffer, 0, length);
sum+=length;
}
[解决办法]
int down = 0;
while((down=is.read(buffer) > 0) {
downsize += down;
output.write(buffer, 0, down);
Message m2 = handler.obtainMessage();
m2.what = 1;
//提示已下载百分之多少
m2.arg1 = downsize * 100 / fileLength;
m2.sendToTarget();
}

最主要是这一句 output.write(buffer);
改成output.write(buffer, 0, down);

读书人网 >Android

热点推荐