Swing程序实现网络资源下载
在Java网络编程中,资源下载是必不可少的一部分,如何使用代码从网络上下载你需要的网络资源。在Java中可以使用HttpURLConnection类来实现。
网络资源单线程下载
创建窗体关键代码:创建一个类,继承JFrame(窗体类),在该类的构造方法设置窗体内容(如窗体大小、将控件添加到容器中以及设置控件的位置等等),其中使用addActionListener监听按钮以进行相对应的响应。但点击下载按钮时获取输入地址的文本框内容,将该输入的地址作为参数调用编写好的下载文件方法。关键代码如下
private JTextField jf_text;//单行文本域
public DownloadResources() {
super();
//设置布局为空
getContentPane().setLayout(null);
setTitle("网络资源单线程下载");//设置标题
setBounds(0, 0, 500, 200);
//设置窗体默认关闭方式
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//省略添加设置控件的部分代码
final JButton button = new JButton();
//注册监听器以监听事件源产生的事件 通过ActionListener响应用户点击按钮
button.addActionListener(new ActionListener() {//下载按钮
public void actionPerformed(final ActionEvent e) {
String address = jf_text.getText().trim();// 获得网址
download(address); //调用下载文件方法
}
});
final JButton button_1 = new JButton();//清空按钮
//注册监听器
button_1.addActionListener(new ActionListener() {
public void actionPerformed(final ActionEvent e) {
jf_text.setText(null);// 清除内容
jf_text.requestFocus();// 使文本框获得焦点
}
});
下载文件方法:将传过来的地址作为参数创建URL对象,通过URL对象获取连接对象从而打开资源连接通信获取该输入流,而文件名通过路径进行截取获取,创建文件输出流对象进行输出文件,最后弹出信息框。
public void download(String urlAdd){
try {
URL url = new URL(urlAdd); // 创建URL对象
URLConnection urlConnection = url.openConnection(); //获得连接对象
urlConnection.connect();// 打开到url引用资源的通信链接
InputStream in = urlConnection.getInputStream() ; //获得输入流对象
String filePath = url.getFile();// 获得完整路径
// 获得路径中最后一个斜杠的位置
int index = filePath.lastIndexOf("/");
String fileName = filePath.substring(index+1); // 截取文件名
// 创建输出流对象
FileOutputStream out = new FileOutputStream("D:/is/"+fileName); byte[] bytes = new byte[1024]; // 声明存放下载内容的字节数组
int count = in.read(bytes); // 从输入流中读取内容
while (count != -1){
out.write(bytes,0,count); // 将读取的内容写到输出流
count = in.read(bytes); // 继续从输入流中读取内容
}
// 关闭输出、输入流
out.close();
in.close();
JOptionPane.showMessageDialog(null, "下载完成");//弹出对话框
} catch (Exception e) {
e.printStackTrace();
}
}
main主方法:在主线程实例化当前类,设置窗体可见。
public static void main(String args[]) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
DownloadResources frame = new DownloadResources();
// 省略了获取当前屏幕大小设置窗体居中部分代码
//设置窗体可见
frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
效果
多线程下载方法 关键代码 通过创建线程类,在下载时指定线程数,使用RandomAccessFile类的seek()方法定位下一个写入点,再通过write()方法写入文件。
public void download(String url, String dest, int threadNum) throws Exception{
URL downURL = new URL(url);// 创建网络资源的URL
HttpURLConnection conn = (HttpURLConnection)downURL.openConnection();
long fileLength = -1;// 用于存储文件长度的变量
int stateFlagCode = conn.getResponseCode();// 获得连接状态标记代码
if (stateFlagCode == 200) {// 网络连接正常
fileLength = conn.getContentLength();// 获得文件的长度
conn.disconnect();// 取消网络连接
}
if (fileLength > 0) {
long byteCounts = fileLength / threadNum + 1;//每个线程的字节数
File file = new File(dest);// 创建目标文件的File对象
int i = 0;
while (i < threadNum) {
long startPosition = byteCounts * i;// 定义开始位置
long endPosition = byteCounts * (i + 1);// 定义结束位置
if (i == threadNum - 1) {
DownMultiThread fileThread = new DownMultiThread(url, file,
startPosition, 0);// 创建DownMultiThread线程的实例
new Thread(fileThread).start();// 启动线程对象
} else {
DownMultiThread fileThread = new DownMultiThread(url, file,
startPosition, endPosition);//创建DownMultiThread线程的实例
new Thread(fileThread).start();// 启动线程对象
}
i++;
}
JOptionPane.showMessageDialog(null, "下载完成");
} }
Swing程序实现网络资源下载相关推荐
- 小程序源码:修复登录接口版最新知识付费变现小程序源码下载-独立后台版本
这个小程序是干什么的? 资源分享小程序为网络资源分享类自媒体解决变现与传播问题,小小的资源,要钱不合适,不要钱又不能用爰发电,让用户分享又没有效果,那么我们就可以让用户打开小程序,看一段广告,直接获取 ...
- AidLearning安装Oracle JDK让Java Swing程序在华为MatePadPro平板上跑起来
AidLearning安装Oracle JDK让Java Swing程序在华为MatePadPro平板上跑起来 cemike@126.com 入手华为MatePadPro平板以后就有把windows台 ...
- 解决 GTK+/GNOME 3 环境下 Java Swing 程序使用本地 GTK+ 主题时菜单无边框 bug 的方法...
在 GTK+/GNOME 3 环境下采用默认的 Adwaita 主题时,Java Swing 程序如果使用本地 GTK+ 主题会出现菜单无边框的 bug,这个问题也可能在其他常用的 GTK+ 主题中出 ...
- swing程序中如何响应鼠标回车事件?
swing程序中如何响应鼠标回车事件? 参考这里实现:http://topic.csdn.net/u/20090806/17/b49846f5-cd76-467e-9b7c-21fe41846095. ...
- swing程序 过时拉嘛_从关闭或过时的应用程序导入文件
swing程序 过时拉嘛 使用专有应用程序的最大风险之一是,如果软件消失或终止对旧文件格式的支持,将会失去对数字内容的访问权限. 将您的内容移动为开放格式是防止自己由于供应商锁定而被锁定的最佳方法,为 ...
- 提供《疯狂的程序员》下载地址
提供<疯狂的程序员>下载地址 疯狂的程序员完整版 下载 疯狂的程序员 Hello World DOS 第一个梦想 电源里的病毒 寻址方式 黑客 <黑客防线> 魔术师的双手 又是 ...
- 首发全DIY强大微信朋友圈截图制作生成小程序源码下载点赞,评论等等
这是一款朋友圈截图制作的一款小程序源码 主要的特点是DIY,之前小编发布过朋友圈截图的小程序 不管之前那款小程序只能生成点赞数量,无法获取用户名等等 但是这一款就不一样了,这一款刚刚也说了特点是DIY ...
- DIY微信朋友圈截图制作生成小程序源码下载
这是一款朋友圈截图制作的一款小程序源码 主要的特点是DIY,之前小编发布过朋友圈截图的小程序 不管之前那款小程序只能生成点赞数量,无法获取用户名等等 但是这一款就不一样了,这一款刚刚也说了特点是DIY ...
- 2022虎年背景全新UI头像框制作微信小程序源码下载支持多种流量主
给大家带来一款以2022虎年为主的一款头像制作小程序源码 前两天小编也分享过一款虎年头像框的小程序 不过那款为了美观,所以就没有给那款小程序添加流量主 不过有很多小伙伴问小编能不能加,所以小编就把源码 ...
最新文章
- 树莓派:交叉编译,以及带wiringPi库的如何交叉编译
- 历数2013年优秀的开源游戏引擎与开源游戏项目
- jQuery使用(十五):when()方法的使用
- IntelliJ中的远程调试Wildfly应用程序
- oracle硬盘亮黄灯,RH2288H V3服务器硬盘亮黄灯故障处理案例
- mac共享文件夹 linux,一文搞定 Linux,Mac,Windows 的 NFS 网络文件共享服务部署
- 环信 之 注册及创建应用
- Python: PIL基本代码
- 没事学学docker(三):配置阿里云镜像加速以及解决docker起不来的问题
- 6.Linux 运行级别
- Android修改ro.debugable开启全局debug模式
- https spdy
- 伪原创文章生成器-自媒体洗稿工具-关键词文章生成工具免费
- 速达3000pro saas数据库修复
- 中国移动重置服务密码方法
- 网页部署https后浏览器访问风险提示或者您的链接不是私密链接解决方案
- 第二章 自动化测试基础(下)
- 【经典智力题】1024! 末尾有多少个0?——“计算阶乘末尾0的数量”问题引出
- Spring5系列(一) | 重新认识下spring
- 解决Hash碰撞冲突方法总结