importorg.apache.commons.io.FileUtils;importorg.apache.commons.io.IOUtils;importorg.apache.commons.lang3.StringUtils;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importjava.io.File;importjava.io.FileOutputStream;importjava.io.InputStream;importjava.net.URL;importjava.net.URLConnection;/*** 文件工具类
*
*@authorWiener
* @date 2020/10/22*/
public classFileTools {private static Logger logger = LoggerFactory.getLogger(FileTools.class);/*** 使用第三方jar包 org.apache.commons.io.FileUtils 简捷地下载网络文件
*
*@paramurlStr 资源URL
*@paramdir 存储目录
*@paramfileName 存储文件名
*@return
*/
public static voiddownloadHttpResource(String urlStr, String fileName, String dir) {try{
URL httpUrl= newURL(urlStr);
fileName=getFileName(httpUrl, fileName);
File dirFile= newFile(dir);if (!dirFile.exists()) {
dirFile.mkdirs();
}
FileUtils.copyURLToFile(httpUrl,new File(dir + File.separator +fileName));
}catch(Exception e) {
e.printStackTrace();
}
}/*** 下载网络文件,常规写法,不多说,直接上代码
*
*@paramurlStr 资源URL
*@paramdir 保存目录
*@paramfileName 保存后的文件名,不包括后缀
*@returnvoid*/
public static voiddownloadNetResource(String urlStr, String fileName, String dir) {//下载网络文件
int byteSum = 0;int byteRead = 0;
InputStream inStream= null;
FileOutputStream fos= null;try{
URL url= newURL(urlStr);
URLConnection conn=url.openConnection();
fileName=getFileName(url, fileName);//设置超时间为3秒
conn.setConnectTimeout(3 * 1000);//模拟浏览器访问,防止屏蔽程序抓取而返回403错误
conn.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36");//拿到输入流就相当于拿到了文件
inStream =conn.getInputStream();//文件保存位置
File saveDir = newFile(dir);if (!saveDir.exists()) {
saveDir.mkdir();
}
File file= new File(saveDir + File.separator +fileName);
fos= newFileOutputStream(file);byte[] buffer = new byte[1204];while ((byteRead = inStream.read(buffer)) != -1) {
byteSum+=byteRead;
fos.write(buffer,0, byteRead);
}
logger.info("文件 {} 的大小为 {}", fileName, byteSum);
}catch(Exception e) {
logger.error("下载网络资源 {} 失败,请及时处理,", fileName, e);
}finally{
IOUtils.closeQuietly(inStream,null);
IOUtils.closeQuietly(fos,null);
}
}private staticString getFileName(URL url, String fileName) {if(StringUtils.isBlank(fileName)) {
fileName=Long.toString(System.currentTimeMillis());
}
String urlFileName=url.getFile();
logger.info("网络资源原始名称:{}", urlFileName);if(StringUtils.isNotEmpty(urlFileName)) {
String subfix= urlFileName.substring(urlFileName.lastIndexOf("."));
fileName= fileName +subfix;
}returnfileName;
}public static voidmain(String[] args) {//可以是其它类型的文件,此处以PDF文件为例
String urlStr = "https://papers.xtremepape.rs/ACCA/Diploma-in-Financial-Management/Module-A/Paper-DA1/2002-Dec/da1_2002_dec_a.pdf";
String fileName= "我是文件名";
String netFileName= "下载后的文件名";
String savePath= "F:/Download";//downloadHttpUrl(urlStr, fileName, savePath);
downloadNetResource(urlStr, null, savePath);
}
}