一个简单的java窗体下载小程序(完整代码)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
也可以右击,激活内容,直接运行。
程序运行效果如图:
该测试链接来自pc6,下载结果为:
文件顺利打开。
程序主要使用了url访问http地址,并获取输入流,创建本地文件,输出读取的数据到本地文件中。其他部分则是窗体。
以下是全部代码:
同样是word对象,直接拖到桌面即可。
显示窗体的ui包:
分割字符串的util包:
}
else{
System.out.println("下载中...");
infoLabel.setText("下载中...");
try {
url = new URL(httpAddress);//设置链接
conn = url.openConnection();//打开链接
file = new File(fileDir,fileName);
add(baseBox);
}
}
Util包:
SplitString.java
package下载.util;
public class SplitString {
private String splitstr;
public SplitString() {
// TODO自动生成的构造函数存根
}
/**
* @param httpAddress
public DownloadWin(String title) {
init();
setTitle(title);
setSize(400,300);
setLayout(new GridLayout(2, 1, 0, 0));//为美观考虑,第二行没有使用。
setLocationRelativeTo(null);
file.createNewFile();
int n=0;
int sum = 0;
byte b[] = new byte[1];//用来存放网络上下载的数据缓冲
/*
*本机测试,byte数组长度超过2,下载稍大的压缩文件,就会导致压缩文件出错,其他文档也可能出问题
*最好长度为1,但是效率估计会很低下
*/
System.out.println(fileName);
if(""==fileName||null==fileName||""==fileDir||null==fileDir){
System.out.println("网络地址或保存路径不正确");
infoLabel.setText("网络地址或保存路径不正确");
boxV1.add(lineLabel);
boxV1.add(httpLine);
boxV2.add(saveLabel);
boxV2.add(savePath);
boxV3.add(btnDownload);
boxV4.add(infoLabel);
baseBox.add(boxV1);
Box.createVerticalStrut(15);
//String[] str = httpAddress.split("/");
//"unhappy".substring(2) returns "happy"
//"a.s.k".httpAddress.lastIndexOf(".") returns 3
//splitstr = str[str.length-1];//获取“/”之后最后一个字符串
监听事件的listener包:
其中,ui包:
MainWin.java
package下载.ui;
public class MainWin {
public static void main(String[] args) {
DownloadWin win = new DownloadWin("下载");
}
lineLabel = new JLabel("访问地址:");
httpLine = new JTextField();
saveLabel = new JLabel("保存路径:");
savePath = new JTextField();
btnDownload = new JButton("下载");
//获取链接指向的文件的相关数据
itStream = conn.getInputStream();
//in = new DataInputStream(itStream);//数据输入流
otStream = new FileOutputStream(file);//根据文件创建输出流
//out = new DataOutputStream(otStream);//数据输出流
import javax.swing.JLabel;
import javax.swing.JTextField;
import下载.listener.DownloadListener;
public class DownloadWin extends JFrame{
/**
*
*/
private static final long serialVersionUID = -7226361346020458023L;
splitstr = splitString.substring(splitString.lastIndexOf(accordingString)+1);//获取最后一个“.”之后的字符串
//如果要分解的字符串为a/c/,测试得返回换行
return splitstr;
}
}
listener包:
Listener.java
private JTextField httpLine;
private JTextField savePath;
private JButton btnDownload;
private JLabel lineLabel;
private JLabel saveLabel;
private static JLabel infoLabel;
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
private void init() {
Box baseBox = Box.createVerticalBox();
Box boxV1 = Box.createHorizontalBox();
}
DownloadWin.java
package下载.ui;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import javax.swing.Box;
import javax.swing.JButton;
import javax.swing.JFrame;
baseBox.add(boxV2);
Box.createVerticalStrut(15);
baseBox.add(boxV3);
Box.createVerticalStrut(15);
baseBox.add(boxV4);
Box.createVerticalStrut(15);
baseBox.add(boxV5);
JLabel infoLabel) {
this.httpLine = httpLine;
this.infoLabel = infoLabel;
this.savePath = savePath;
}
@Override
public void actionPerformed(ActionEvent e) {
* <p>文件保存目录
*/
private void downFile(String httpAddress, String fileDir) {
SplitString httpSplit = new SplitString();
fileName = httpSplit.split(httpAddress,"/");//根据“/”分解
package下载.listener;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import jwk.baidu.comva.io.DataInputStream;
import java.io.DataOutputStream;
private InputStream itStream;
private DataInputStream in;
private FileOutputStream otStream;
private DataOutputStream out;
public DownloadListener(JTextField httpLine, JTextField savePath,
import javax.swing.JLabel;
import javax.swing.JTextField;
import下载.util.SplitString;
public class DownloadListener implements ActionListener {
private JTextField httpLine, savePath;
Box boxV2 = Box.createHorizontalBox();
Box boxV3 = Box.createHorizontalBox();
Box boxV4 = Box.createHorizontalBox();
Box boxV5 = Box.createHorizontalBox();
//in.close();
itStream.close();
private JLabel infoLabel;
privateString httpAddress;
private String fileName;
private String fileDir;
private File file;
private URL url;
private URLConnection conn;
首先,这只是一个很简单的程序,所以大神请绕道。
心血来潮,用java编写了一个能访问http链接,并能下载文件的窗体小程序。实测能够正确下载17M的压缩包,图片,文档,html等。但是因为程序效率低下,于是没有继续测试更大的压缩文件(问题可能在于保存输入流到缓冲区的数组)。
程序已打包jar可执行文件,并将代码一齐打包到jar中。为方便使用jar,使用word文档对象包装了它,将下面的对象(显示为一个图标)拖到桌面或者其他文件夹,即可得到该程序:
*
* @param accordingString
* @return返回“/”之后最后一个字符串
*/
public String split(String splitString,String accordingString) {
//httpAddress.endsWith("/");
//如果a/c/则返回的字符串是c
infoLabel = new JLabel();
/**
*监听器
*/
DownloadListener listener = new DownloadListener(httpLine,savePath,infoLabel);//将需要改变显示状态的控件传递过去处理
btnDownload.addActionListener(listener);
while((n=itStream.read(b))!=-1){
otStream.flush();
otStream.write(b);
}
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
//otStream.flush();//刷新此输出流并强制写出所有缓冲的输出字节
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
httpAddress= httpLine.getText();
fileDir = savePath.getText();
infoLabel.setText("");
downFile(httpAddress,fileDir);
}
/**
* @param httpAddress
* <p>下载链接
* @param fileDir
相关文档
最新文档