如何做一个简单的下载软件
2018-01-20 11:30
453 查看
建一个Class,用于保存下载任务信息
代码如下
package myproject02;
/*
* 保存一个下载任务的信息
*/
public class download {
//记录4项信息
private String url ;//下载文件的地址
private long pos;//已经下载的字节数
private long fileSize;//文件总大小
private String fileName;//保存在本地的文件名
public download(String url,String fileName) {
this.url=url;
this.fileName=fileName;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public long getPos() {
return pos;
}
public void setPos(long pos) {
this.pos = pos;
}
public long getFileSize() {
return fileSize;
}
public void setFileSize(long fileSize) {
this.fileSize = fileSize;
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
}
第二部,再创建一个类,用于下载,代码如下
package myproject02;
import java.io.InputStream;
import java.io.RandomAccessFile;
import java.net.HttpURLConnection;
import java.net.URL;
/*
* 断点续传测试
*/
public class TestDownload {
public static void main(String[] args) {
/*
* 1.创建下载任务,download实例
* 2.根据任务中的下载地址打开网络连接,获取对应的输入流
* 3.创建任务中保存在本地的文件的输出流
* 4.进行读写操作
* 5.关闭流
*/
try {
//1
download info = new download(
"http://www.shipinzhuanhuan.cn/cad/download-cadconvertor.html"
,
"java_1_7.zip"
);/*输入想要下载文件的地址,就可以下载了*/
//2 java.net.URL
URL url = new URL(info.getUrl()); //给定网络地址
//通过地址打开网络连接
HttpURLConnection conn =(HttpURLConnection)url.openConnection();
/*
* 获取下载文件的大小
*/
long totalSize=Long.parseLong(conn.getHeaderField("CONTENT-LENGTH"));
info.setFileSize(totalSize);
conn.disconnect();//与服务器断开
//再次连接
conn=(HttpURLConnection)url.openConnection();
String prop ="bytes=" +info.getPos()+"-";
//通过连接设置参数,通知服务器从什么地方开始读
conn.setRequestProperty("RANGE",prop);
//打开输入流开始读取文件
InputStream in = conn.getInputStream();
//将任务中记录的本地文件作为写出的目标文件
RandomAccessFile raf= new RandomAccessFile(info.getFileName(),"rw");
//服务器seek的位置就是我们写的位置
raf.seek(info.getPos());
//创建一个缓冲区
byte[] buffer =new byte[1024*10];//10K缓冲区
int sum =-1;//记录读取的字节数
/*
* 进行下载操作
* 输入流读取数据
*/
while((sum=in.read(buffer))>0) {
raf.write(buffer,0,sum);
//记录当前下载的字节数
info.setPos(info.getPos()+sum);
System.out.println(info.getPos());
}
raf.close();
in.close();
conn.disconnect();//关闭和服务器的连接
} catch (Exception e) {
}
}
}
代码如下
package myproject02;
/*
* 保存一个下载任务的信息
*/
public class download {
//记录4项信息
private String url ;//下载文件的地址
private long pos;//已经下载的字节数
private long fileSize;//文件总大小
private String fileName;//保存在本地的文件名
public download(String url,String fileName) {
this.url=url;
this.fileName=fileName;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public long getPos() {
return pos;
}
public void setPos(long pos) {
this.pos = pos;
}
public long getFileSize() {
return fileSize;
}
public void setFileSize(long fileSize) {
this.fileSize = fileSize;
}
public String getFileName() {
return fileName;
}
public void setFileName(String fileName) {
this.fileName = fileName;
}
}
第二部,再创建一个类,用于下载,代码如下
package myproject02;
import java.io.InputStream;
import java.io.RandomAccessFile;
import java.net.HttpURLConnection;
import java.net.URL;
/*
* 断点续传测试
*/
public class TestDownload {
public static void main(String[] args) {
/*
* 1.创建下载任务,download实例
* 2.根据任务中的下载地址打开网络连接,获取对应的输入流
* 3.创建任务中保存在本地的文件的输出流
* 4.进行读写操作
* 5.关闭流
*/
try {
//1
download info = new download(
"http://www.shipinzhuanhuan.cn/cad/download-cadconvertor.html"
,
"java_1_7.zip"
);/*输入想要下载文件的地址,就可以下载了*/
//2 java.net.URL
URL url = new URL(info.getUrl()); //给定网络地址
//通过地址打开网络连接
HttpURLConnection conn =(HttpURLConnection)url.openConnection();
/*
* 获取下载文件的大小
*/
long totalSize=Long.parseLong(conn.getHeaderField("CONTENT-LENGTH"));
info.setFileSize(totalSize);
conn.disconnect();//与服务器断开
//再次连接
conn=(HttpURLConnection)url.openConnection();
String prop ="bytes=" +info.getPos()+"-";
//通过连接设置参数,通知服务器从什么地方开始读
conn.setRequestProperty("RANGE",prop);
//打开输入流开始读取文件
InputStream in = conn.getInputStream();
//将任务中记录的本地文件作为写出的目标文件
RandomAccessFile raf= new RandomAccessFile(info.getFileName(),"rw");
//服务器seek的位置就是我们写的位置
raf.seek(info.getPos());
//创建一个缓冲区
byte[] buffer =new byte[1024*10];//10K缓冲区
int sum =-1;//记录读取的字节数
/*
* 进行下载操作
* 输入流读取数据
*/
while((sum=in.read(buffer))>0) {
raf.write(buffer,0,sum);
//记录当前下载的字节数
info.setPos(info.getPos()+sum);
System.out.println(info.getPos());
}
raf.close();
in.close();
conn.disconnect();//关闭和服务器的连接
} catch (Exception e) {
}
}
}
相关文章推荐
- 金山卫士开源软件之旅(二) 简单教程:如何创建一个基于金山卫士界面库的工程
- 看一个商业共享软件是如何在下载站刷下载量来作弊的!
- 那个iphone 下载收费软件 如何支付啊?或者说如何绑定一个银行卡
- 如何简单的下载一些小文件并保存在一个路径中(有些方法进行了封装)
- 如何给多个子系统设计一个简单通用的权限管理方案?(详细讲解及源代码下载)
- Unity中如何利用一个协程和www类实现简单的图片下载
- 点击一个控件后,如何弹出下载软件,如flashget,并将链接传给它
- 不用第三方写一个简单的推流软件
- Android UI开发: 横向ListView(HorizontalListView)及一个简单相册的完整实现 (附源码下载)
- 如何配win10 64位系统的java环境,以及下载什么软件写第一个java project比较好
- 一个简单的例子看明白如何利用window.location.hash实现ajax操作时浏览器的前进/后退功能
- 推荐一个金融软件开发的文档下载站
- 如何编写Firefox浏览器插件,一个下载百度空间所有文章的插件
- 如何做一个软件项目经理? ----写给公司所有的开发人员
- 如何使用Createjs来编写HTML5游戏(六)完成一个简单的打飞机游戏(上)
- 如何构造一个简单的USB过滤驱动程序 分类: windows驱动程序WDM 2013-09-25 14:45 477人阅读 评论(0) 收藏
- 安排一个简单的软件开发项目的进度
- 软件开发中的矛盾——一个简单的例子
- 基于Java的一个简单的文件上传下载功能
- 如何在ns2中实现一个简单的网络协议