import com.alibaba.fastjson.JSON; import org.apache.poi.ss.formula.functions.T; import java.io.*; import java.net.HttpURLConnection; import java.net.URL; import java.util.zip.GZIPInputStream; /** * @ProjectName: 下载工具类 * @Package: com.jeeplus.common.utils * @ClassName: DownloadUtil * @Author: MC * @Description: ${description} * @Date: 2019/10/14 0014 15:14 * @Version: 1.0 */ public class DownloadUtil { /** * @Method 根据URL路径下载网络资源并保存到指定路径并指定下载后保存文件的名称 * @Author MC url:要下载的网络资源路径 filePath:资源下载后要保存的路径 fileName:资源下载后要保存的文件名称 method:请求网络资源下载时指定请求方式,默认为GET * @Return * @Date 2019/10/14 0014 15:29 */ public static boolean downloadFile(String url, String filePath,String fileName, String method){ if(StringUtils.isEmpty(url) || StringUtils.isEmpty(filePath) || StringUtils.isEmpty(fileName)){ return false; } //创建不同的文件夹目录 File file=new File(filePath); //判断文件夹是否存在 if (!file.exists()) { //如果文件夹不存在,则创建新的的文件夹 file.mkdirs(); } FileOutputStream fileOut = null; HttpURLConnection conn = null; InputStream inputStream = null; BufferedOutputStream bos = null; BufferedInputStream bis = null; try { // 建立链接 URL httpUrl=new URL(url); conn=(HttpURLConnection) httpUrl.openConnection(); if(!StringUtils.isEmpty(method)){ //以Post方式提交表单,默认get方式 conn.setRequestMethod(method); } conn.setDoInput(true); conn.setDoOutput(true); // post方式不能使用缓存 conn.setUseCaches(true); //连接指定的资源 conn.connect(); //获取网络输入流 inputStream=conn.getInputStream(); bis = new BufferedInputStream(inputStream); //判断文件的保存路径后面是否以/结尾 if (!filePath.endsWith("/")) { filePath += "/"; } //写入到文件(注意文件保存路径的后面一定要加上文件的名称) fileOut = new FileOutputStream(filePath+fileName); bos = new BufferedOutputStream(fileOut); byte[] buf = new byte[4096]; int length = bis.read(buf); //保存文件 while(length != -1) { bos.write(buf, 0, length); length = bis.read(buf); } } catch (Exception e){ e.printStackTrace(); return false; }finally { try { bos.close(); bis.close(); conn.disconnect(); } catch (IOException e) { e.printStackTrace(); return false; } } return true; } /** * @Method 解压文件,指定路径进行解压,指定解压后的名称和后缀类型 * @Author MC sourcedir:要解压的文件路径 outputFileName:解压后输出的文件名称 outputFileSuf:解压后输出的文件后缀名 * @Return * @Date 2019/10/14 0014 15:43 */ public static String decompressionFile(String sourcedir,String outputFileName,String outputFileSuf){ if(StringUtils.isEmpty(sourcedir) || StringUtils.isEmpty(outputFileSuf)){ return null; } String ouputfile = ""; GZIPInputStream gzin = null; FileInputStream fin = null; FileOutputStream fout = null; try { //建立gzip压缩文件输入流 fin = new FileInputStream(sourcedir); //建立gzip解压工作流 gzin = new GZIPInputStream(fin); if(StringUtils.isEmpty(outputFileName)){ //建立解压文件输出流 ouputfile = sourcedir.substring(0,sourcedir.lastIndexOf('.')) +"."+ outputFileSuf; }else{ ouputfile = sourcedir.substring(0,sourcedir.lastIndexOf(File.separator))+File.separator +outputFileName +"."+ outputFileSuf; } fout = new FileOutputStream(ouputfile); int num; byte[] buf=new byte[4096]; while ((num = gzin.read(buf,0,buf.length)) != -1) { fout.write(buf,0,num); } } catch (Exception e){ e.printStackTrace(); return null; }finally { try { gzin.close(); fout.close(); fin.close(); } catch (IOException e) { e.printStackTrace(); return null; } } return ouputfile; } /** * @Method 解压文件为json格式,并径读取json文件并转换为对应的实体bean * @Author MC sourcedir:待解压的文件路径 calzz:json解析后要映射的Bean * @Return * @Date 2019/10/14 0014 15:59 */ public static <T>T decompression2JsonFile2Bean(String sourcedir,String outputFileName, Class<T> calzz) throws IOException { String jsonFilePath = decompressionFile(sourcedir, outputFileName, "json"); if(!StringUtils.isEmpty(jsonFilePath)){ File file = new File(jsonFilePath ); String jsonStr = FileUtils.readFileToString(file,"UTF-8"); T bean = JSON.parseObject(jsonStr, calzz); return bean; } return null; } }
java 网络资源下载,压缩文件解压
最新推荐文章于 2024-07-11 20:06:08 发布