我有一段java http下载的代码,但是我很多地方读不懂,帮我谢谢注释

http://pan.baidu.com/s/1pJuQRhT百度盘的链接,最好每行都有代码,谢谢... http://pan.baidu.com/s/1pJuQRhT
百度盘的链接,最好每行都有代码,谢谢
展开
 我来答
崛起ljk
2014-12-14 · 超过17用户采纳过TA的回答
知道答主
回答量:70
采纳率:0%
帮助的人:29.3万
展开全部
package API;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLDecoder;
import Get.Other_API.*;
public class DownFile implements Runnable
{

private String LOCAL_PATH="d:/";
private String Down_Path=null;
//下面两个是Down_Path的get和set的方法
public String getDown_Path() { return Down_Path;}
public void setDown_Path(String downPath) {Down_Path=downPath;}
public String getPath() { return LOCAL_PATH; }
public void setPath(String Path) {LOCAL_PATH=Path;}

public void DownNow()
{
//待下载文件地址
String fileUrl=getDown_Path();
InputStream in=null;
OutputStream out=null;
HttpURLConnection conn=null;
String fileName=null;
int count=0;
int finished=0;
int _temp=0;
try
{
//初始化连接
URL url=new URL(fileUrl);//将String类型的地址变为url对象
conn = (HttpURLConnection) url.openConnection();//开启连接
conn.setDoInput(true);//必要的,开启输入输出的设置
conn.setDoOutput(true);
//获取文件名
String disposition=conn.getHeaderField("Content-Disposition");
if(disposition!=null&&!"".equals(disposition))
{
//从头中获取文件名
fileName=disposition.split(";")[1].split("=")[1].replaceAll("\"","");
}
else
{
//从地址中获取文件名
fileName=fileUrl.substring(fileUrl.lastIndexOf("/")+1);
}
if(fileName!=null&&!"".equals(fileName))
{
//文件名解码
fileName=URLDecoder.decode(fileName, "utf-8");
}
else
{
System.out.println("Error");
//如果无法获取文件名,则随机生成一个
//fileName="file_"+(int)(Math.random()*10);
}
//读取数据
if(conn.getResponseCode()==HttpURLConnection.HTTP_OK)
{
//这种方法比较常用,得记住
byte[] buffer=new byte[2048];
in = conn.getInputStream();//获取文本的输入流
out=new FileOutputStream(new File(LOCAL_PATH,fileName));//确定输出的地方
int size=conn.getContentLength();
while((count=in.read(buffer))!=-1)//不断循环,每次读取2048比特的数据
{
if(count!=0)
{
out.write(buffer,0,count);//将count大小的数据写进去
finished+=count;//结尾的写入的位置改变,为下次写入做准备
if(_temp%500==0)
{
System.out.printf("下载已完成---->%1$.2f%%\n",(double)finished/size*100);//动态输出下载的进度
_temp=0;
}
_temp++;
}
else
{
break;
}
}
}
}
catch (MalformedURLException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
try
{
out.close();//关闭输出流
in.close();//关闭输入流
conn.disconnect();//关闭连接,有打开就有关闭
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
//因为该类实现了Runnable接口,所以得实现这个run方法
@Override
public void run() {
// TODO Auto-generated method stub
DownNow();//调用上面的DownNow方法
}
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式