【Java】工具类积累

文章目录

@非Spring的工具包

一、Java byte数据与文件的相互转换方法:FileUtil

1. file转byte[]数组 | 文件转字节流

Java byte数组和文件相互转换
Java byte转化成file

package com.amc.oainterface.service;
 
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;

public class FileUtil {
	/**
	 * 获得指定文件的byte数组 
	 * @param filePath 文件绝对路径
	 * @return
	 */
	public static byte[] file2Byte(String filePath){
		ByteArrayOutputStream bos=null;
		BufferedInputStream in=null;
		try{
			File file=new File(filePath);
			if(!file.exists()){  
	            throw new FileNotFoundException("file not exists");  
	        }
			bos=new ByteArrayOutputStream((int)file.length());
			in=new BufferedInputStream(new FileInputStream(file));
			int buf_size=1024;
			byte[] buffer=new byte[buf_size];
			int len=0;
			while(-1 != (len=in.read(buffer,0,buf_size))){
				bos.write(buffer,0,len);
			}
			return bos.toByteArray();
		}
		catch(Exception e){
			System.out.println(e.getMessage());
            e.printStackTrace();
            return null;
		}
		finally{
			try{
				if(in!=null){
					in.close();
				}
				if(bos!=null){
					bos.close();
				}
            }
			catch(Exception e){
				System.out.println(e.getMessage());
				e.printStackTrace();  
            }
        }
    }
2. byte[]数组转file | 字节流转文件
package com.amc.oainterface.service;
 
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
 
    /**
     * 根据byte数组,生成文件 
     * @param bfile 文件数组
     * @param filePath 文件存放路径
     * @param fileName 文件名称
     */
	public static void byte2File(byte[] bfile,String filePath,String fileName){
		BufferedOutputStream bos=null;
		FileOutputStream fos=null;
		File file=null;
		try{
			File dir=new File(filePath);
			if(!dir.exists() && !dir.isDirectory()){//判断文件目录是否存在  
				dir.mkdirs();  
            }
			file=new File(filePath+fileName);
			fos=new FileOutputStream(file);
			bos=new BufferedOutputStream(fos);
			bos.write(bfile);
		} 
		catch(Exception e){
			System.out.println(e.getMessage());
			e.printStackTrace();  
        }
		finally{
			try{
				if(bos != null){
					bos.close(); 
				}
				if(fos != null){
					fos.close();
				}
			}
			catch(Exception e){
				System.out.println(e.getMessage());
				e.printStackTrace();  
			}
		}
    }
}

二、java 获取当前时间的三种方法:DateUtil附日期处理

1. 通过Util包中的Date获取
import java.text.SimpleDateFormat;

public static String getDateTime(){
		Date date = new Date();
		SimpleDateFormat dateFormat= new SimpleDateFormat("yyyy-MM-dd :hh:mm:ss");
		//System.out.println(dateFormat.format(date));
		return dateFormat.format(date);
}
2. 通过Util包的Calendar 获取
public static String getCalendarTime(){
		Calendar calendar= Calendar.getInstance();
		SimpleDateFormat dateFormat= new SimpleDateFormat("yyyy-MM-dd :hh:mm:ss");
		//System.out.println(dateFormat.format(calendar.getTime()));
		return dateFormat.format(calendar.getTime());
	}
3. 通过Util包的Calendar 获取时间,分别获取年月日时分秒
public static String getDIYTime(){
		Calendar cal=Calendar.getInstance();
		int y=cal.get(Calendar.YEAR);
		int m=cal.get(Calendar.MONTH);
		int d=cal.get(Calendar.DATE);
		int h=cal.get(Calendar.HOUR_OF_DAY);
		int mi=cal.get(Calendar.MINUTE);
		int s=cal.get(Calendar.SECOND);
		//System.out.println("现在时刻是"+y+"年"+m+"月"+d+"日"+h+"时"+mi+"分"+s+"秒");
		return "现在时刻是"+y+"年"+m+"月"+d+"日"+h+"时"+mi+"分"+s+"秒";
	}
3. 得到当前年的第一天和最后一天
    /********************直接获取无需传参*****************************/
	//获取当年的第一天
	public static Date getCurrYearFirst(){
		Calendar currCal=Calendar.getInstance();
		int currentYear = currCal.get(Calendar.YEAR);
		return getYearFirst(currentYear);
	}

	//获取当年的最后一天
	public static Date getCurrYearEnd(){
		Calendar currCal=Calendar.getInstance();
		int currentYear = currCal.get(Calendar.YEAR);
		return getYearLast(currentYear);
	}

    /********************传递年份*****************************/
	//获取某年第一天日期
	public static Date getYearFirst(int year){
		Calendar calendar = Calendar.getInstance();
		calendar.clear();
		calendar.set(Calendar.YEAR, year);
		Date currYearFirst = calendar.getTime();
		return currYearFirst;
	}

	//获取某年最后一天日期
	public static Date getYearLast(int year){
		Calendar calendar = Calendar.getInstance();
		calendar.clear();
		calendar.set(Calendar.YEAR, year);
		calendar.roll(Calendar.DAY_OF_YEAR, -1);
		Date currYearLast = calendar.getTime();

		return currYearLast;
	}

拓展:
1.java之Date(日期)、Date格式化、Calendar(日历)
2.Java中Date转换大全,返回不同精确度的日期格式

三、表格数据导出到Excel:ExcelUtil

POI示例地址:POI-实现导入导出

四、Java8中数组(引用类型)、String、List、Set之间的相互转换问题【待梳理】

数组、String、List、Set之间的相互转换问题

五、Java8 Lambda表达式集合分组、条件过滤、组装、去重、排序、转换、求和、最值【待梳理】

JDK 1.8 Lambda表达式集合分组、条件过滤、组装、去重、排序、转换、求和、最值

六、*(重点)javaBean与Map互转

Map转Bean

  • 方法1: 利用org.apache.commons.beanutils 工具类实现 Map --> Bean
    public static void transMap2Bean2(Map<String, Object> map, Object obj) {
        if (map == null || obj == null) {
            return;
        }
        try {
            BeanUtils.populate(obj, map);
        } catch (Exception e) {
            System.out.println("transMap2Bean2 Error " + e);
        }
    }
    
  • (推荐)方法2: 利用Introspector,PropertyDescriptor实现 Map --> Bean
    public static void transMap2Bean(Map<String, Object> map, Object obj) {
        try {
            BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());
            PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
    
            for (PropertyDescriptor property : propertyDescriptors) {
                String key = property.getName();
    
                if (map.containsKey(key)) {
                    Object value = map.get(key);
                    // 得到property对应的setter方法
                    Method setter = property.getWriteMethod();
                    setter.invoke(obj, value);
                }
    
            }
    
        } catch (Exception e) {
            System.out.println("transMap2Bean Error " + e);
        }
    
        return;
        }
    

Bean转Map

  • 利用Introspector和PropertyDescriptor 将Bean --> Map

    public static Map<String, Object> transBean2Map(Object obj) {
     if(obj == null){
      	  return null;
       }        
      Map<String, Object> map = new HashMap<String, Object>();
       try {
    	    BeanInfo beanInfo = Introspector.getBeanInfo(obj.getClass());
      	    PropertyDescriptor[] propertyDescriptors = beanInfo.getPropertyDescriptors();
      	  	for (PropertyDescriptor property : propertyDescriptors) {
            String key = property.getName();
    
            // 过滤class属性
            if (!key.equals("class")) {
                // 得到property对应的getter方法
                Method getter = property.getReadMethod();
                Object value = getter.invoke(obj);
    
                map.put(key, value);
            }
    
        }
      } catch (Exception e) {
       	 System.out.println("transBean2Map Error " + e);
       }
    
      return map;
    }
    

原贴:javaBean与Map互转

七、ServletUtils(与Requst、Response有关的方法)

  • 获取客户端IP(法一):
/***
	 * 获取客户端ip地址(可以穿透代理)
	 * 获取用户真实IP地址,不使用request.getRemoteAddr();的原因是有可能用户使用了代理软件方式避免真实IP地址, 
   	 *  
     * 可是,如果通过了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP值,究竟哪个才是真正的用户端的真实IP呢? 
     * 答案是取X-Forwarded-For中第一个非unknown的有效IP字符串。 
     *  
     * 如:X-Forwarded-For:192.168.1.110, 192.168.1.120, 192.168.1.130, 
     * 192.168.1.100 
     *  
     * 用户真实IP为: 192.168.1.110 
     *  
     * @param request 
     * @return 
     */  
	public static String getClientIpAddr(HttpServletRequest request) {
		String ip = request.getHeader("X-Forwarded-For");
		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
			ip = request.getHeader("Proxy-Client-IP");
		}
		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
			ip = request.getHeader("WL-Proxy-Client-IP");
		}
		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
			ip = request.getHeader("HTTP_X_FORWARDED_FOR");
		}
		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
			ip = request.getHeader("HTTP_X_FORWARDED");
		}
		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
			ip = request.getHeader("HTTP_X_CLUSTER_CLIENT_IP");
		}
		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
			ip = request.getHeader("HTTP_CLIENT_IP");
		}
		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
			ip = request.getHeader("HTTP_FORWARDED_FOR");
		}
		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
			ip = request.getHeader("HTTP_FORWARDED");
		}
		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
			ip = request.getHeader("HTTP_VIA");
		}
		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
			ip = request.getHeader("REMOTE_ADDR");
		}
		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
			ip = request.getRemoteAddr();
		}
		return ip;
	}
  • 获取客户端IP(法二):
 public static String getIpAddr(HttpServletRequest request) {  
        String ip = request.getHeader("X-Real-IP");  
        if (null != ip && !"".equals(ip.trim())  
                && !"unknown".equalsIgnoreCase(ip)) {  
            return ip;  
        }  
        ip = request.getHeader("X-Forwarded-For");  
        if (null != ip && !"".equals(ip.trim())  
                && !"unknown".equalsIgnoreCase(ip)) {  
            // get first ip from proxy ip  
            int index = ip.indexOf(',');  
            if (index != -1) {  
                return ip.substring(0, index);  
            } else {  
                return ip;  
            }  
        }  
        return request.getRemoteAddr();  
    }  
  • 判断服务器是否为本机(即自己请求自己)
/*** 
     * 服务器是否是本机 
     * @param request 
     * @return 
     */  
    public static boolean isLocalIp(HttpServletRequest request){  
        String ip=WebServletUtil.getClientIpAddr(request);  
        return ip.equals("127.0.0.1")||ip.equals("localhost")||ip.equals("0:0:0:0:0:0:0:1");  
    }  

@org.apache.*中常用的工具类

一、org.apache.commons.io.IOUtils*

  • closeQuietly:关闭一个IO流、socket、或者selector且不抛出异常,通常放在finally块
  • toString:转换IO流、 Uri、 byte[]为String
  • copy:IO流数据复制,从输入流写到输出流中,最大支持2GB
  • toByteArray:从输入流、URI获取byte[]
  • write:把字节. 字符等写入输出流
  • toInputStream:把字符转换为输入流
  • readLines:从输入流中读取多行数据,返回List
  • copyLarge:同copy,支持2GB以上数据的复制
  • lineIterator:从输入流返回一个迭代器,根据参数要求读取的数据量,全部读取,如果数据不够,则失败

二、org.apache.commons.io.FileUtils

  • deleteDirectory:删除文件夹
  • readFileToString:以字符形式读取文件内容
  • deleteQueitly:删除文件或文件夹且不会抛出异常
  • copyFile:复制文件
  • writeStringToFile:把字符写到目标文件,如果文件不存在,则创建
  • forceMkdir:强制创建文件夹,如果该文件夹父级目录不存在,则创建父级
  • write:把字符写到指定文件中
  • listFiles:列举某个目录下的文件(根据过滤器)
  • copyDirectory:复制文件夹
  • forceDelete:强制删除文件

三、 org.apache.commons.lang.StringUtils

  • isBlank:字符串是否为空 (trim后判断)
  • isEmpty:字符串是否为空 (不trim并判断)
  • equals:字符串是否相等
  • join:合并数组为单一字符串,可传分隔符
  • split:分割字符串
  • EMPTY:返回空字符串
  • trimToNull:trim后为空字符串则转换为null
  • replace:替换字符串

四、 org.apache.http.util.EntityUtils

  • toString:把Entity转换为字符串
  • consume:确保Entity中的内容全部被消费。可以看到源码里又一次消费了Entity的内容,假如用户没有消费,那调用Entity时候将会把它消费掉
  • toByteArray:把Entity转换为字节流
  • consumeQuietly:和consume一样,但不抛异常
  • getContentCharset:获取内容的编码

五、org.apache.commons.lang3.StringUtils

  • isBlank:字符串是否为空 (trim后判断)
  • isEmpty:字符串是否为空 (不trim并判断)
  • equals:字符串是否相等
  • join:合并数组为单一字符串,可传分隔符
  • split:分割字符串
  • EMPTY:返回空字符串
  • replace:替换字符串
  • capitalize:首字符大写

六、 org.apache.commons.io.FilenameUtils

  • getExtension:返回文件后缀名
  • getBaseName:返回文件名,不包含后缀名
  • getName:返回文件全名
  • concat:按命令行风格组合文件路径(详见方法注释)
  • removeExtension:删除后缀名
  • normalize:使路径正常化
  • wildcardMatch:匹配通配符
  • seperatorToUnix:路径分隔符改成unix系统格式的,即/
  • getFullPath:获取文件路径,不包括文件名
  • isExtension:检查文件后缀名是不是传入参数(List)中的一个

七、 org.springframework.util.StringUtils

  • hasText:检查字符串中是否包含文本
  • hasLength:检测字符串是否长度大于0
  • isEmpty:检测字符串是否为空(若传入为对象,则判断对象是否为null)
  • commaDelimitedStringToArray:逗号分隔的String转换为数组
  • collectionToDelimitedString:把集合转为CSV格式字符串
  • replace 替换字符串
  • delimitedListToStringArray:相当于split
  • uncapitalize:首字母小写
  • collectionToDelimitedCommaString:把集合转为CSV格式字符串
  • tokenizeToStringArray:和split基本一样,但能自动去掉空白的单词

八、 org.apache.commons.lang.ArrayUtils

  • contains:是否包含某字符串
  • addAll:添加整个数组
  • clone:克隆一个数组
  • isEmpty:是否空数组
  • add:向数组添加元素
  • subarray:截取数组
  • indexOf:查找某个元素的下标
  • isEquals:比较数组是否相等
  • toObject:基础类型数据数组转换为对应的Object数组

九、 org.apache.commons.lang.StringEscapeUtils

  • 参考十五:org.apache.commons.lang3.StringEscapeUtils

十、 org.apache.http.client.utils.URLEncodedUtils

  • format:格式化参数,返回一个HTTP POST或者HTTP PUT可用application/x-www-form-urlencoded字符串
  • parse:把String或者URI等转换为List

十一、 org.apache.commons.codec.digest.DigestUtils

  • md5Hex:MD5加密,返回32位字符串
  • sha1Hex:SHA-1加密
  • sha256Hex:SHA-256加密
  • sha512Hex:SHA-512加密
  • md5:MD5加密,返回16位字符串

十二、 org.apache.commons.collections.CollectionUtils

  • isEmpty:是否为空
  • select:根据条件筛选集合元素
  • transform:根据指定方法处理集合元素,类似List的map()
  • filter:过滤元素,雷瑟List的filter()
  • find:基本和select一样
  • collect:和transform 差不多一样,但是返回新数组
  • forAllDo:调用每个元素的指定方法
  • isEqualCollection:判断两个集合是否一致

十三、 org.apache.commons.lang3.ArrayUtils

  • contains:是否包含某个字符串
  • addAll:添加整个数组
  • clone:克隆一个数组
  • isEmpty:是否空数组
  • add:向数组添加元素
  • subarray:截取数组
  • indexOf:查找某个元素的下标
  • isEquals:比较数组是否相等
  • toObject:基础类型数据数组转换为对应的Object数组

十四、 org.apache.commons.beanutils.PropertyUtils

  • getProperty:获取对象属性值
  • setProperty:设置对象属性值
  • getPropertyDiscriptor:获取属性描述器
  • isReadable:检查属性是否可访问
  • copyProperties:复制属性值,从一个对象到另一个对象
  • getPropertyDiscriptors:获取所有属性描述器
  • isWriteable:检查属性是否可写
  • getPropertyType:获取对象属性类型

十五、org.apache.commons.lang3.StringEscapeUtils

  • unescapeHtml4:转义html
  • escapeHtml4:反转义html
  • escapeXml:转义xml
  • unescapeXml:反转义xml
  • escapeJava:转义unicode编码
  • escapeEcmaScript:转义EcmaScript字符
  • unescapeJava:反转义unicode编码
  • escapeJson:转义json字符
  • escapeXml10:转义Xml10

这个现在已经废弃了,建议使用commons-text包里面的方法。

十六、 org.apache.commons.beanutils.BeanUtils

  • copyPeoperties:复制属性值,从一个对象到另一个对象
  • getProperty:获取对象属性值
  • setProperty:设置对象属性值
  • populate:根据Map给属性复制
  • copyPeoperty:复制单个值,从一个对象到另一个对象
  • cloneBean:克隆bean实例
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值