java实训方案Word下载.docx
- 文档编号:3113925
- 上传时间:2023-05-01
- 格式:DOCX
- 页数:29
- 大小:75.68KB
java实训方案Word下载.docx
《java实训方案Word下载.docx》由会员分享,可在线阅读,更多相关《java实训方案Word下载.docx(29页珍藏版)》请在冰点文库上搜索。
控制信息,即告诉网络怎样处理数据包。
TCP/IP决定了每个数据包的格式。
如果事先不告诉你,你可能不会知道信息被分成用于传输和再重新组合起来的许多小块。
HTTP/1.0
这是第一个在通讯中指定版本号的HTTP协议版本,至今仍被广泛采用,特别是在代理服务器中。
HTTP/1.1
当前版本。
持久连接被默认采用,并能很好地配合代理服务器工作。
还支持以管道方式在同时发送多个请求和断点继传,这是ftp不法实现的。
以便降低线路负载,提高传输速度。
二.下载管理器概
Downkoad下载管理器它可以暂停下载并恢复,还可以同时实现多个下载,此外它还可以从下载的中断点恢复下载。
此下载器不仅实现了文件下载功能,它还可以进行功能扩充,只要增加一些类和方法就可以实现。
Download的主要工作由Download类[完成。
它的主要作用是下载一个文件并将其内容保存到磁盘,每次向Download添加一个新的下载任务时,就会有一个新的Download对象被实例化,已处理这个下载。
Download具有同时下载多个文件的能力。
为此,每个进行的下载任务都必须独立进行,且每个单独的下载还管理自己的状态,以便反映在GUI中。
Download类首先声明几个静态的final变量,用来指定类中将使用的几个变量,变量URL用来保存被下载文件的URL,变量size用来指定下载文件的字节数大小,变量Download用来保存已经下载的字节数
主要功能按钮介绍
文本域:
用于输入你要下载的文件的URL地址。
addDownioad:
此按钮被点击时GUI会注册一个监听对象。
url:
用于显示当前正在下载的任务的网络地址。
size:
用于显示下载对象的文件大小。
progress:
用于显示下载完成的百分比。
status:
用于显示当前的下载状态。
pause:
暂停当前的下载任务。
resume:
继续当前的下载任务。
cancel:
取消当前的下载任务。
clear:
将当前的下载任务从列表中删除。
GUI管理当前的下载列表。
列表中的每个下载都会报告它的URL,文件大小(字节形式),完成的百分比进度及当前状态。
根据功能组件的会划分,Downkoad可以分为几个类,DownkoadManager类负责GUI。
DownkoadTableModel和ProgressRenderer类显示当前的下载列表。
Downkoad负责执行文件的实际下载操作。
三.Download、DownloadsTableModel、ProgressRenderer、DownloadManager四个类的代码清单及功能说明
Download类负责执行文件下载操作,它主要作用是下载一个文件并将其保存到磁盘。
DownloadsTableMode类主要用于容纳下载列表,并且是GUI实例的后台数据源。
ProgressRenderer类是一个小的工具类,用于显示列与GUI下载列表的下载的当前速度。
Download类负责创建并运行GUI实例,同时利用DownloadsTableMode和ProgressRenderer,以显示当前的下载列表。
四个类的代码如下
1、Download.java
importjava.io.*;
import.*;
importjava.util.*;
//这个类用于从一个URL地址下载文件
classDownloadextendsObservableimplementsRunnable{
//下载缓冲区最大大小
privatestaticfinalintMAX_BUFFER_SIZE=1024;
//这些是状态名称
publicstaticfinalStringSTATUSES[]={"
Downloading"
"
Paused"
"
Complete"
Cancelled"
Error"
};
//这些是状态代码
publicstaticfinalintDOWNLOADING=0;
publicstaticfinalintPAUSED=1;
publicstaticfinalintCOMPLETE=2;
publicstaticfinalintCANCELLED=3;
publicstaticfinalintERROR=4;
privateURLurl;
//下载地址
privateintsize;
//文件大小(字节)
privateintdownloaded;
//已下载大小(字节)
privateintstatus;
//当前下载状态
//构造下载函数.
publicDownload(URLurl){
this.url=url;
size=-1;
downloaded=0;
status=DOWNLOADING;
//开始下载
download();
}
//获取这个下载的地址
publicStringgetUrl(){
returnurl.toString();
//获取该下载的文件大小
publicintgetSize(){
returnsize;
//获取该下载的下载进度
publicfloatgetProgress(){
return((float)downloaded/size)*100;
//获取该下载的下载状态
publicintgetStatus(){
returnstatus;
//暂停下载
publicvoidpause(){
status=PAUSED;
stateChanged();
//恢复下载
publicvoidresume(){
//取消下载
publicvoidcancel(){
status=CANCELLED;
//标记该下载,因为下载出错
privatevoiderror(){
status=ERROR;
//开始或恢复下载
privatevoiddownload(){
Threadthread=newThread(this);
thread.start();
//从URL地址中获取文件名
privateStringgetFileName(URLurl){
StringfileName=url.getFile();
returnfileName.substring(fileName.lastIndexOf('
/'
)+1);
//下载文件
publicvoidrun(){
RandomAccessFilefile=null;
InputStreamstream=null;
try{
//连接URL
HttpURLConnectionconnection=
(HttpURLConnection)url.openConnection();
//指定下载文件的开始位置(应该是断点续传的意思)
connection.setRequestProperty("
Range"
bytes="
+downloaded+"
-"
);
//连接
connection.connect();
//确定回应代码在200以内
if(connection.getResponseCode()/100!
=2){
error();
//检查有效的内容长度
intcontentLength=connection.getContentLength();
if(contentLength<
1){
//设置下载的大小如果尚未设置
if(size==-1){
size=contentLength;
//打开文件并查找文件尾
file=newRandomAccessFile(getFileName(url),"
rw"
file.seek(downloaded);
stream=connection.getInputStream();
while(status==DOWNLOADING){
//缓冲区大小根据剩余文件大小调整
bytebuffer[];
if(size-downloaded>
MAX_BUFFER_SIZE){
buffer=newbyte[MAX_BUFFER_SIZE];
}else{
buffer=newbyte[size-downloaded];
//从服务器读取并存入缓冲区
intread=stream.read(buffer);
if(read==-1)
break;
//从缓冲区读取并写入文件
file.write(buffer,0,read);
downloaded+=read;
//如果文件下载完成,改变下载状态为complete
if(status==DOWNLOADING){
status=COMPLETE;
}catch(Exceptione){
}finally{
//关闭文件
if(file!
=null){
file.close();
}catch(Exceptione){}
//关闭与服务器的连接
if(stream!
stream.close();
//提醒使用者下载状态已经改变
privatevoidstateChanged(){
setChanged();
notifyObservers();
}
2、DownloadManager.java
importjava.awt.*;
//引入所以的包
importjava.awt.event.*;
//引入所以事件包
//引入网络
//引入所需的使用的包
importjavax.swing.*;
//引入swing文件夹
importjavax.swing.event.*;
//引入swing文件夹下的事件包
//下载管理
publicclassDownloadManagerextendsJFrame//定义下载管理类继承窗口
implementsObserver//实现观察者
{
//下载文本域
privateJTextFieldaddTextField;
//定义文本域增加域
//下载表数据模型
privateDownloadsTableModeltableModel;
//定义下载表格模型
//下载表格列表
privateJTabletable;
//定义表格
//这些按钮为管理选定的下载
privateJButtonpauseButton,resumeButton;
//定义按钮
privateJButtoncancelButton,clearButton;
//当前选择的下载
privateDownloadselectedDownload;
//定义选择下载
//表的选择标记是否被清除
privatebooleanclearing;
//定义类型
//构造函数可下载管理
publicDownloadManager()//定义下载管理
{
//设置应用主题
setTitle("
DownloadManager"
//主题名称
//设置窗口尺寸
setSize(640,480);
//窗口大小
//处理窗口关闭事件
addWindowListener(newWindowAdapter()//增加窗口监听器
publicvoidwindowClosing(WindowEvente)//定义空窗口
actionExit();
//操作出口
}
});
//建立文件菜单
JMenuBarmenuBar=newJMenuBar();
//定义菜单栏
JMenufileMenu=newJMenu("
File"
//定义文件菜单
fileMenu.setMnemonic(KeyEvent.VK_F);
//建立文件菜单
JMenuItemfileExitMenuItem=newJMenuItem("
Exit"
KeyEvent.VK_X);
//菜单文件出口
fileExitMenuItem.addActionListener(newActionListener()//增加退出窗口
publicvoidactionPerformed(ActionEvente)//定义空菜单出口
fileMenu.add(fileExitMenuItem);
//文件菜单
menuBar.add(fileMenu);
//在文件才单中增加菜单条
setJMenuBar(menuBar);
//建立菜单条
//建立增加面板
JPaneladdPanel=newJPanel();
//定义面板
addTextField=newJTextField(30);
//增加文本文件
addPanel.add(addTextField);
//增加面板
JButtonaddButton=newJButton("
AddDownload"
//面板名称
addButton.addActionListener(newActionListener()//增加操作监听器
publicvoidactionPerformed(ActionEvente)//定义所做的操作空间,
actionAdd();
//增加操作
addPanel.add(addButton);
//建立下载表
tableModel=newDownloadsTableModel();
//定义表格模型
table=newJTable(tableModel);
table.getSelectionModel().addListSelectionListener(new
ListSelectionListener()//建立表格
publicvoidvalueChanged(ListSelectionEvente)//定义值的变化
tableSelectionChanged();
//表格选择变化
//只允许一排在同一时间来挑选
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
//建立表格模型
//建立进度条为描绘器为进度的专栏
ProgressRendererrenderer=newProgressRenderer(0,100);
//定义进度描绘器
renderer.setStringPainted(true);
//显示文本进度
table.setDefaultRenderer(JProgressBar.class,renderer);
//表格建立默认进度
//设定的表的行高足够大适合进度条
table.setRowHeight(
(int)renderer.getPreferredSize().getHeight());
//定义表格行高
//建立下载面板
JPaneldownloadsPanel=newJPanel();
//定义下载面板
downloadsPanel.setBorder(
BorderFactory.createTitledBorder("
Downloads"
));
//下载面板,建立边框
downloadsPanel.setLayout(newBorderLayout());
//下载面板,建立布局
downloadsPanel.add(newJScrollPane(table),//创建滚动窗口
BorderLayout.CENTER);
//边框布局
//设置按钮面板
JPanelbuttonsPanel=newJPanel();
//定义按钮面板
pauseButton=newJButton("
Pause"
//显示暂停按钮
pauseButton.addActionListener(newActionListener()//暂停按钮,增加监听器
publicvoidactionPerformed(ActionEvente)//定义按钮单击方法
actionPause();
//操作暂停
pauseButton.setEnabled(false);
//暂停按钮,建立启用
buttonsPanel.add(pauseButton);
//按钮控制面板,增加暂停按钮
resumeButton=newJButton("
Resume"
//定义重新开始按钮
resumeButton.addActionListener(newActionListener()//重新开始按钮,增加监听器
publicvoidactionPerformed(ActionEvente)//定义监听器
actionResume();
//重新开始操作
resumeButton.setEnabled(false);
//重新开始按钮,建立启用
buttonsPanel.add(resumeButton);
//按钮控制面板,增加重新开始按钮
cancelButton=newJButton("
Cancel"
//定义取消按钮
cancelButton.addActionListener(newActionListener()//取消按钮,增加监听器
actionCancel();
//重新取消操作
cancelButton.setEnabled(false);
//取消按钮,建立启动
buttonsPanel.add(cancelButton);
//按钮控制板,增加取消按钮
clearButton=newJButton("
Clear"
//定义清除按钮
clearButton.addActionListener(newActionListener()//清除按钮,增加监听器
publicvoidactionPerformed(ActionEvente)//定义监听器
actionClear();
//清除操作
clearButton.setEnabled(false);
//清除按钮,建立启动
buttonsPanel.add(clearButton);
//按钮控制板,增加清除按
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 方案