java 网络资源下载,压缩文件解压

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;
    }

}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不能吃辣的JAVA程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值