文章目录
- @非Spring的工具包
- 七、ServletUtils(与Requst、Response有关的方法)
- @org.apache.*中常用的工具类
- 一、org.apache.commons.io.IOUtils*
- 二、org.apache.commons.io.FileUtils
- 三、 org.apache.commons.lang.StringUtils
- 四、 org.apache.http.util.EntityUtils
- 五、org.apache.commons.lang3.StringUtils
- 六、 org.apache.commons.io.FilenameUtils
- 七、 org.springframework.util.StringUtils
- 八、 org.apache.commons.lang.ArrayUtils
- 九、 org.apache.commons.lang.StringEscapeUtils
- 十、 org.apache.http.client.utils.URLEncodedUtils
- 十一、 org.apache.commons.codec.digest.DigestUtils
- 十二、 org.apache.commons.collections.CollectionUtils
- 十三、 org.apache.commons.lang3.ArrayUtils
- 十四、 org.apache.commons.beanutils.PropertyUtils
- 十五、org.apache.commons.lang3.StringEscapeUtils
- 十六、 org.apache.commons.beanutils.BeanUtils
@非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之间的相互转换问题【待梳理】
五、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; }
七、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实例