我有一段java http下载的代码,但是我很多地方读不懂,帮我谢谢注释
http://pan.baidu.com/s/1pJuQRhT百度盘的链接,最好每行都有代码,谢谢...
http://pan.baidu.com/s/1pJuQRhT
百度盘的链接,最好每行都有代码,谢谢 展开
百度盘的链接,最好每行都有代码,谢谢 展开
展开全部
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方法
}
}
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方法
}
}
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询