下载文件与打开网页是一样的,打开网页是将内容显示出来,保存文件就是保存到文件中即可。

实现的代码基本如下:

publicvoiddownFile(String url, String path, String fileName)
throwsIOException {
if(fileName==null||fileName=="")
this.FileName=url.substring(url.lastIndexOf("/")+1);
else
this.FileName=fileName;//取得文件名,如果输入新文件名,则使用新文件名

URL Url
=newURL(url);
URLConnection conn
=Url.openConnection();
conn.connect();
InputStream is
=conn.getInputStream();
this.fileSize=conn.getContentLength();//根据响应获取文件大小
if(this.fileSize<=0) {//获取内容长度为0
thrownewRuntimeException("无法获知文件大小");
}
if(is==null) {//没有下载流
sendMsg(Down_ERROR);
thrownewRuntimeException("无法获取文件");
}
FileOutputStream FOS
=newFileOutputStream(path+this.FileName);//创建写入文件内存流,通过此流向目标写文件

bytebuf[]=newbyte[1024];
downLoadFilePosition
=0;

intnumread;

while((numread=is.read(buf))!=-1) {
FOS.write(buf,
0, numread);
downLoadFilePosition
+=numread


}



try{
is.close();
}
catch(Exception ex) {
;
}

}

 通过此代码就可以实现将内容保存到SD卡等设备上,当然要使用网络,必须得有网络的访问权限。这个需要自己添加,在这里不再添加! 

上面的代码没有实现进度条功能,如果要实现进度条功能,我现在考虑到的就是使用消息进行发送提示,首先实现一个消息。

privateHandler downloadHandler=newHandler() {//用于接收消息,处理进度条
@Override
publicvoidhandleMessage(Message msg) {//接收到的消息,并且对接收到的消息进行处理
if(!Thread.currentThread().isInterrupted()) {
switch(msg.what) {
caseDOWN_START:
pb.setMax(fileSize);
//设置开始长度
caseDOWN_POSITION:
pb.setProgress(downLoadFilePosition);
//设置进度
break;
caseDOWN_COMPLETE:
Toast.makeText(DownLoadFileTest.
this,"下载完成!",1).show();//完成提示
break;

caseDown_ERROR:
String error
=msg.getData().getString("下载出错!");
Toast.makeText(DownLoadFileTest.
this, error,1).show();
break;
}
}
super.handleMessage(msg);
}
};

 这样,在下载的时候只要发送相应的消息,即可有相应的提示!

Last modification:July 9th, 2011 at 11:40 am
如果觉得我的文章对你有用,请随意赞赏