最近积累的一些工具方法(2019-09-24)

 /**
 * 获取当前时间往前往后推几天
 *
 **/
 public Map<String,Date> getDate() {
        Map<String,Date> map = new HashMap<>(2);
        try {
            //获取当前日期
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
            Date today = new Date();
            Date endDate = sdf.parse(sdf.format(today));
            //获取三十天前日期
            Calendar theCa = Calendar.getInstance();
            theCa.setTime(today);
            //最后一个数字5可改,5天的意思
            //data就是往前往后几天的意思,负数是往前,正数是往后
            theCa.add(Calendar.DATE, Integer.parseInt(date));
            Date start = theCa.getTime();
            //三十天之前日期
            Date startDate = sdf.parse(sdf.format(start));
            map.put("end",endDate);
            map.put("start",startDate);
        } catch (ParseException e) {
            e.printStackTrace();
            log.error(e);
        }
        return map;
    }


     /**
     * @param firstArrayList  第一个ArrayList
     * @param secondArrayList 第二个ArrayList
     * @return resultList 差集ArrayList
     * @方法描述:获取两个ArrayList的差集
     */
    public static List<IncomeInvResponse> receiveDefectList(List<IncomeInvResponse> firstArrayList,
            List<InvoiceDetailDO> secondArrayList) {
        List<IncomeInvResponse> resultList = firstArrayList.stream()
                .filter(item -> !secondArrayList.stream().map(e -> e.getInvoiceCode() + "|" + e.getInvoiceNum())
                        .collect(Collectors.toList()).contains(item.getInvoiceCode() + "|" + item.getInvoiceNr()))
                .collect(Collectors.toList());
        return resultList;
    }



     /**
     * 计算两个时间相差天数
     * @param date1
     * @param date2
     * @return
     */
    public static int differentDaysByMillisecond(Date date1, Date date2) {
        int days = (int) ((date2.getTime() - date1.getTime()) / (1000*3600*24));
        return days;
    }

    /**
     * 解析字符串中的数字和汉字
     * @param str
     * @return
     */
    public static Map<String,String> getChinaNum(String str) {
        Map<String,String> obj = new HashMap<>();
        if(StringUtils.isEmpty(str)){
            return obj;
        }
        //获取数字
        String a = str.replaceAll("[^0-9-]", "_").replace("_+", "_");
        String[] as = a.split("_+");
        obj.put("num",replaceNull(as));
        //获取汉字
        String b = str.replaceAll("[^\\u4e00-\\u9fa5]", "_").replace("_+", "_");
        String[] bs = b.split("_+");
        obj.put("china",replaceNull(bs));
        return obj;
    }

    /**
     * 去除数组中的空串
     * @param str
     * @return
     */
    public static String replaceNull(String[] str){
        StringBuffer sb = new StringBuffer();
        for(int i=0; i<str.length; i++) {
            if("".equals(str[i])) {
                continue;
            }
            sb.append(str[i]);
            if(i != str.length - 1) {
                sb.append(",");
            }
        }
        return sb.toString();
    }



/**
     * 将一组数据固定分组,每组n个元素
     *
     * @param source 要分组的数据源
     * @param n      每组n个元素
     * @param <T>
     * @return
     */
    public static <T> List<List<T>> fixedGrouping(List<T> source, int n) {

        if (null == source || source.size() == 0 || n <= 0) {
            return null;
        }
        List<List<T>> result = new ArrayList<List<T>>();
        int remainder = source.size() % n;
        int size = (source.size() / n);
        for (int i = 0; i < size; i++) {
            List<T> subset = null;
            subset = source.subList(i * n, (i + 1) * n);
            result.add(subset);
        }
        if (remainder > 0) {
            List<T> subset = null;
            subset = source.subList(size * n, size * n + remainder);
            result.add(subset);
        }
        return result;
    }

 

 

package com.util;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.Header;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.*;
import org.apache.http.message.BasicHeader;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.*;
import java.net.URL;
import java.net.URLConnection;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Base64;
import java.util.List;
import java.util.Map;

public class HttpClientUtil {

    private static HttpClient httpClient;
    private static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8");
    private static final Logger logger = LoggerFactory.getLogger(HttpClientUtil.class);
    private static final String USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36";

    static {
        List<Header> defaultHeaders = new ArrayList<Header>();
        defaultHeaders.add(new BasicHeader("content-type", "application/json"));
        httpClient = HttpClientBuilder.create()
                .setMaxConnPerRoute(50)
                .setMaxConnTotal(500)
                .setRetryHandler(new StandardHttpRequestRetryHandler(3, true))
                .setServiceUnavailableRetryStrategy(new DefaultServiceUnavailableRetryStrategy(2, 500))
                .setDefaultHeaders(defaultHeaders)
                .setUserAgent(USER_AGENT)
                .build();
    }


    public static String get(String httpUrl, List<NameValuePair> nvps) throws IOException {
        StringBuilder stringBuilder = new StringBuilder(httpUrl);
        if (nvps != null && nvps.size() > 0) {
            String params = (URLEncodedUtils.format(nvps, DEFAULT_CHARSET));
            stringBuilder.append("?" + params);
        }
        HttpGet httpGet = new HttpGet(stringBuilder.toString());
        HttpResponse response = httpClient.execute(httpGet);
        return EntityUtils.toString(response.getEntity(), "UTF-8");
    }


    public static String doPost(String url, String json) {
        String result = null;
        try {
            HttpPost post = new HttpPost(url);
            post.setEntity(new StringEntity(json, DEFAULT_CHARSET));

            String basicAuthKey = "pay:7C4F4363838B5846367BEB03962F8B81";
            String base64Result = Base64.getEncoder().encodeToString(basicAuthKey.getBytes("utf-8"));
            post.setHeader("Authorization",  base64Result);

            HttpResponse response = httpClient.execute(post);
            result = inputStreamToStr(response.getEntity().getContent(), "UTF-8");
        } catch (Exception e) {
            e.printStackTrace();
            logger.error("url=>{}json=>{}发送Post请求失败,异常=>{}", url, json, e);
        }
        return result;
    }

    private static List<NameValuePair> buildPostParams(Map<String, String> params) {
        if (params == null || params.size() == 0) {
            return null;
        }
        List<NameValuePair> results = new ArrayList<NameValuePair>();

        for (Map.Entry<String, String> entry : params.entrySet()) {
            String key = entry.getKey();
            String value = entry.getValue();
            results.add(new BasicNameValuePair(key, value));
        }
        return results;
    }

    public static String inputStreamToStr(InputStream is, String charset) throws IOException {
        BufferedReader in = new BufferedReader(new InputStreamReader(is, "ISO-8859-1"));
        StringBuffer buffer = new StringBuffer();
        String line = "";
        while ((line = in.readLine()) != null) {
            buffer.append(line);
        }
        return new String(buffer.toString().getBytes("ISO-8859-1"), charset);
    }

    /**
     * 向指定 URL 发送POST方法的请求
     *
     * @param url   发送请求的 URL
     * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
     * @return 所代表远程资源的响应结果
     */
    public static String sendPost(String url, String param) {
        logger.info("url=>{}, param=>{}", url, param);
        HttpPost httppost = new HttpPost(url);
        if (StringUtils.isNotBlank(param)) {
            StringEntity se = new StringEntity(param, "utf-8");
            se.setContentType("application/json; charset=UTF-8");
            httppost.setEntity(se);
        }
        HttpResponse response;
        InputStream inputStream = null;
        String result = null;
        try {
            response = httpClient.execute(httppost);
            inputStream = response.getEntity().getContent();
            ByteArrayOutputStream output = new ByteArrayOutputStream();
            byte[] bytes = new byte[1024];
            int len = inputStream.read(bytes, 0, 1024);
            while (len > 0) {
                output.write(bytes, 0, len);
                len = inputStream.read(bytes, 0, 1024);
            }
            result = new String(output.toByteArray(), "utf-8");
            logger.info("发送请求完成,result:{}", result);
        } catch (IOException e) {
            logger.error("发送请求失败,异常:{}", e);
        } finally {
            IOUtils.closeQuietly(inputStream);
        }
        return result;
    }

    /**
     * 向指定URL发送GET方法的请求
     *
     * @param url   发送请求的URL
     * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
     * @return URL 所代表远程资源的响应结果
     */
    public static String sendGet(String url, String param) {
        StringBuilder result = new StringBuilder();
        BufferedReader in = null;
        try {
            String urlNameString = url + "?" + param;
            URL realUrl = new URL(urlNameString);
            // 打开和URL之间的连接
            URLConnection connection = realUrl.openConnection();
            // 设置通用的请求属性
            connection.setRequestProperty("accept", "*/*");
            connection.setRequestProperty("connection", "Keep-Alive");
            connection.setRequestProperty("user-agent",
                    "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
            // 建立实际的连接
            connection.connect();
            // 获取所有响应头字段
            in = new BufferedReader(new InputStreamReader(
                    connection.getInputStream(), "UTF-8"));
            String line;
            while ((line = in.readLine()) != null) {
                result.append(line);
            }
        } catch (Exception e) {
            logger.error("发送GET请求出现异常!" + e);
        }
        // 使用finally块来关闭输入流
        finally {
            try {
                if (in != null) {
                    in.close();
                }
            } catch (Exception e2) {
                logger.error("异常"+ e2.toString());
            }
        }
        return result.toString();
    }

    /**
     * 向指定 URL 发送POST方法的请求
     *
     * @param url   发送请求的 URL
     * @param message 请求参数,json的形式。
     * @return 所代表远程资源的响应结果
     */
    public static Boolean postUrl(String url, String message) {
        logger.info("url=>{}, message=>{}", url, message);
        HttpPost httppost = new HttpPost(url);
        String currentTime = String.valueOf(System.currentTimeMillis()/1000);
        httppost.addHeader("Authorization", "BTBPM17D4A7ABEE164341B879A1E9D44CB674");
        httppost.addHeader("App-Key", "192208F8DB5942DBBCB16ED762B7DCDE");
        httppost.addHeader("APP_SECRET", "65E66CFE173F4F8A864BCA50DB6FC979");
        httppost.addHeader("Timestamp", currentTime);
        httppost.addHeader("Sign-Method", "md5");
        httppost.addHeader("Sign", encryptSign(message, currentTime));

        StringEntity se = new StringEntity(message, "utf-8");
        se.setContentType("application/json; charset=UTF-8");
        httppost.setEntity(se);
        InputStream inputStream = null;
        HttpResponse response;
        Boolean isSuccess = false;
        try {
            response = httpClient.execute(httppost);
            inputStream = response.getEntity().getContent();
            ByteArrayOutputStream output = new ByteArrayOutputStream();
            byte[] bytes = new byte[1024];
            int len = inputStream.read(bytes, 0, 1024);
            while (len > 0) {
                output.write(bytes, 0, len);
                len = inputStream.read(bytes, 0, 1024);
            }
            String result = new String(output.toByteArray(), "utf-8");
            JSONObject dataObject = JSON.parseObject(result);
            isSuccess = dataObject.getBoolean("IsSuccess");
            logger.info("发送请求完成,result:{}", result);
        } catch (IOException e) {
            logger.error("发送请求失败,异常:{}", e);
        } finally {
            IOUtils.closeQuietly(inputStream);
        }
        return isSuccess;
    }

    private static String encryptSign(String param, String currentTime) {

      return null;
    }



    /**
     * POST请求返回String
     *
     * @param url
     * @param param
     * @param cookie
     * @return
     */
    public static String doPost(String url, Map<String, String> param, String cookie) {
        logger.info("url=>{}, param=>{}", url, JSON.toJSONString(param));
        // 创建Httpclient对象
        CloseableHttpClient httpClient = HttpClients.createDefault();
        CloseableHttpResponse response = null;
        String resultString = "";
        try {
            response = postResponse(httpClient, response, url, param, cookie);
            resultString = EntityUtils.toString(response.getEntity(), "utf-8");
            logger.info("请求完成:{}", resultString);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                response.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

        return resultString;
    }

    public static String doPost(String url, Map<String, String> param) {
        return doPost(url, param, null);
    }

    /**
     * POST请求
     *
     * @param httpClient
     * @param response
     * @param url
     * @param param
     * @param cookie
     * @return
     */
    public static CloseableHttpResponse postResponse(CloseableHttpClient httpClient, CloseableHttpResponse response,
            String url, Map<String, String> param, String cookie) {

        try {
            // 创建Http Post请求
            HttpPost httpPost = new HttpPost(url);
            if (cookie != null) {
                httpPost.setHeader("Cookie", cookie);
            }

            // 创建参数列表
            if (param != null) {
                List<NameValuePair> paramList = new ArrayList<>();
                for (String key : param.keySet()) {
                    paramList.add(new BasicNameValuePair(key, param.get(key)));
                }
                // 模拟表单
                UrlEncodedFormEntity entity = new UrlEncodedFormEntity(paramList, "utf-8");
                httpPost.setEntity(entity);
            }
            // 执行http请求
            response = httpClient.execute(httpPost);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return response;
    }
}

关流工具

 public static void close(Closeable... closeables){
        if(closeables != null){
            for(Closeable closeable:closeables){
                try {
                    closeable.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值