使用FileUtils实现一个简易文件下载器
今天使用使用FileUtils实现一个简易文件下载器 ,功能很简单,提供目标文件url输入框,和下载后文件保存的磁盘路径及文件名,点击下载即可完成。
主要是—--使用commons-io-2.5.jar,这是Apache的一个开源项目,是对Java IO的增强版,里面封装了很多文件操作、目录操作实用的方法。
核心类FileUtils,里面有很多操作文件的函数,如FileUtils.sizeOf(file);//获取文件的大小
本例则是使用里面的一个函数,从目标url,下载文件到本地磁盘。
先在网上找好待下载文件,如百度图片,右击复制图片地址
http://news.xinhuanet.com/photo/2016-06/16/129066324_14660334568691n.jpg
下载到 D:/todo/33.jpg
源代码如下
package com.ljheee.ui;
import javax.swing.*;
import javax.swing.GroupLayout.Alignment;
import javax.swing.LayoutStyle.ComponentPlacement;
import org.apache.commons.io.FileUtils;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.awt.event.ActionEvent;
/**
* UI界面--包括main方法
* @authorljheee
*
*/
public classDownloadFrame {
private JFramejf = null;
private JTextFieldtargetURL;
private JTextFieldsaveURL;
boolean isFinish = true;
public DownloadFrame() {
this.jf =new JFrame("Download 1.0");;
// jf.setSize(400,300);
jf.setLocationRelativeTo(null);
jf.setResizable(false);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JLabellblUrlurl= newJLabel("URL \u5F85\u4E0B\u8F7D\u6587\u4EF6url\u5730\u5740");
targetURL = new JTextField();
targetURL.setColumns(35);
JLabellbldtodoabcpng= newJLabel("\u6587\u4EF6\u4FDD\u5B58\u8DEF\u5F84\u53CA\u547D\u540D \u5982D:\\\\todo\\abc.png");
saveURL = new JTextField();
saveURL.setColumns(35);
//开始下载
JButtonbutton= newJButton("\u5F00\u59CB\u4E0B\u8F7D");
button.addActionListener(new ActionListener() {
public voidactionPerformed(ActionEvent arg0) {
StringurlStr= targetURL.getText();
URLurl= null;
try {
url = new URL(urlStr);
Stringdest= saveURL.getText();
downloadFile(url,dest);
}catch(IOExceptione) {
e.printStackTrace();
isFinish = false;
JOptionPane.showMessageDialog(jf,"Error: "+e.getMessage());
}
if(isFinish) JOptionPane.showMessageDialog(jf,"下载完成!");
}
});
GroupLayoutgroupLayout= newGroupLayout(jf.getContentPane());
groupLayout.setHorizontalGroup(
groupLayout.createParallelGroup(Alignment.LEADING)
.addGroup(groupLayout.createSequentialGroup()
.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
.addComponent(lblUrlurl)
.addComponent(targetURL, GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addComponent(lbldtodoabcpng)
.addComponent(saveURL, GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addComponent(button))
.addContainerGap(150,Short.MAX_VALUE))
);
groupLayout.setVerticalGroup(
groupLayout.createParallelGroup(Alignment.LEADING)
.addGroup(groupLayout.createSequentialGroup()
.addGap(22)
.addComponent(lblUrlurl)
.addPreferredGap(ComponentPlacement.UNRELATED)
.addComponent(targetURL, GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addGap(37)
.addComponent(lbldtodoabcpng)
.addPreferredGap(ComponentPlacement.UNRELATED)
.addComponent(saveURL, GroupLayout.PREFERRED_SIZE,GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)
.addGap(29)
.addComponent(button)
.addContainerGap(59,Short.MAX_VALUE))
);
jf.getContentPane().setLayout(groupLayout);
jf.pack();
jf.setVisible(true);
}
/**
* 从目标url 现在资源到dest
* @param url 目标资源--可以是文件、视频、文本....
* @param dest指定下载后 封装的文件对象,指定保存文件名和路径
* @throws IOException
*/
public void downloadFile(URL url, Stringdest)throwsIOException {
//下载方法(分装在commons-io-2.5.jar)一行搞定
FileUtils.copyURLToFile(url,new File(dest));
}
public static void main(String[] args) {
new DownloadFrame();
}
}
需要注意的是,工程记得导入外部jar包,即commons-io-2.5.jar,这里可以免费下载http://download.csdn.net/download/ljheee/9551827。
导入这个包才能使用FileUtils。
本工程完整源代码下载可见http://download.csdn.net/detail/ljheee/9551859