java web 项目 常用 小工具类 ~~~~

举报
小米粒-biubiubiu 发表于 2020/10/22 11:08:56 2020/10/22
【摘要】 java web 项目 常用 小工具类 ~~~~

                                java web 项目 常用 小工具类 ~~~~

一 、DateUtil  日期工具类

package com.devframe.common.util;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

/**
 * @author zhangkai
 * @ClassName: DateUtil
 * @Description: 日期工具类
 * @date 2017年9月22日 上午8:52:33
 */
public class DateUtil {
    /**
     * SimpleDateFormat不是线程安全的. 在多线程并行处理的情况下, 会得到非预期的值. 这个错误非常普遍!
     * <p>所以只给定格式,自己new<p/>
     * "yyyy-MM-dd": 2017-09-22<br>
     * "yyyy-MM-dd hh:mm:ss": 2017-09-22 9:27:41<br>
     * "yyyy-MM-dd hh:mm:ss EE": 2017-09-22 9:27:41 星期五<br>
     * "yyyy年MM月dd日 hh:mm:ss EE": 2017年09月22日 9:27:41 星期五<br>
     */
    public static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";

    public static final String DATE_FORMAT1 = "yyyy-MM-dd";
    
    public static final String DATE_FORMAT2="yyyyMMddHHmmss";
    
    public static final String  DATE_FORMAT3= "yyMMddHHmmss";
    
    public static final String DATE_FORMAT4 = "yyyy-MM-dd 00:00:00";
    /**
     * 时间戳转换成日期格式字符串
     *
     * @param seconds 精确到秒的字符串
     * @param format  指定格式
     * @return String
     */
    public static String timeStamp2Datestr(String seconds, String format) {
        if (seconds == null || seconds.isEmpty() || seconds.equals("null")) {
            return "";
        }
        if (format == null || format.isEmpty()) {
            format = DATE_FORMAT;
        }
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        return sdf.format(new Date(Long.valueOf(seconds + "000")));
    }

    /**
     * 日期格式字符串转换成时间戳
     *
     * @param date_str 字符串日期
     * @param format   format
     * @return String
     */
    public static String datestr2TimeStamp(String date_str, String format) {
        if (format == null || format.isEmpty()) {
            format = DATE_FORMAT;
        }
        try {
            SimpleDateFormat sdf = new SimpleDateFormat(format);
            return String.valueOf(sdf.parse(date_str).getTime() / 1000);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "";
    }

    /**
     * date 转换成时间戳字符串
     *
     * @param date date
     * @return java.lang.String
     */
    public static String date2TimeStamp(Date date) {
        if (date == null) {
            date = new Date();
        }
        try {
            return String.valueOf(date.getTime());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return "";
    }

    /**
     * 取得当前时间戳(精确到秒)
     *
     * @return String
     */
    public static String timeStamp() {
        long time = System.currentTimeMillis();
        return String.valueOf(time / 1000);
    }

    /**
     * date转换成string
     *
     * @param date   date
     * @param format formatStr
     * @return String
     */
    public static String date2String(Date date, String format) {
        if (date == null) {
            return null;
        }
        if (format == null || format.isEmpty()) {
            format = DATE_FORMAT;
        }
        try {
            SimpleDateFormat sdf = new SimpleDateFormat(format);
            return sdf.format(date);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 时间戳转成Date
     *
     * @param timeStamp 时间戳字符串
     * @return Date
     */
    public static Date timeStamp2Date(String timeStamp) {
        if (timeStamp == null || timeStamp.isEmpty()) {
            return null;
        }
        try {
            if (timeStamp.length() == 10) {
                return new Date(Long.valueOf(timeStamp + "000"));
            }
            if (timeStamp.length() == 13) {
                return new Date(Long.valueOf(timeStamp));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 时间字符串转换成Date
     *
     * @param dateString date字符串
     * @param format     转换格式字符串
     * @return Date
     */
    public static Date string2Date(String dateString, String format) {
        if (StringUtil.isNull(dateString)) {
            return null;
        }
        if (StringUtil.isNull(format)) {
            format = DATE_FORMAT;
        }
        try {
            SimpleDateFormat sdf = new SimpleDateFormat(format);
            return sdf.parse(dateString);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * 返回当前时间精确到秒的时间戳
     *
     * @return Long
     */
    public static Long getSecondTimestamp() {
        return getSecondTimestamp(null);
    }

    /**
     * 获取精确到秒的时间戳,默认返回当前时间
     *
     * @return Long
     */
    public static Long getSecondTimestamp(Date date) {
        if (null == date) {
            date = new Date();
        }
        String timestamp = String.valueOf(date.getTime());
        int length = timestamp.length();
        if (length > 3) {
            return Long.valueOf(timestamp.substring(0, length - 3));
        } else {
            return 0L;
        }
    }

    /**
     * 返回传入时间与当前时间间隔秒数
     *
     * @param date date
     * @return long
     */
    public static long getTimeDelta(Date date) {
        return getTimeDelta(new Date(), date);
    }

    /**
     * 返回指定时间间隔秒数
     *
     * @param date1 date1
     * @param date2 date2
     * @return long
     */
    public static long getTimeDelta(Date date1, Date date2) {
        if (date1 == null) {
            throw new NullPointerException();
        }
        if (date2 == null) {
            return 0L;
        }
        return Math.abs(date1.getTime() - date2.getTime()) / 1000;
    }

    public static double getTimeDeltaByHour(Date date) {
        if (date == null) {
            throw new NullPointerException("date required not null");
        }
        return Math.abs(System.currentTimeMillis() - date.getTime()) / (1000 * 3600);
    }
    
    
    /**
     * 获取当前日期实在周的星期一和星期日的日期
     * @param args
     */
    public static List<String > getTimeInterval() {  
	     Calendar cal = Calendar.getInstance();
	     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd ");
	     // 设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一  
	     cal.setFirstDayOfWeek(Calendar.MONDAY);  
	     // 获得当前日期是一个星期的第几天  
	     int day = cal.get(Calendar.DAY_OF_WEEK);
	     // 根据日历的规则,给当前日期减去星期几与一个星期第一天的差值  
	     cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day);  
	     //星期一
	     String imptimeBegin = sdf.format(cal.getTime());    
	     cal.add(Calendar.DATE, 6);
	     //星期日
	     String imptimeEnd = sdf.format(cal.getTime()); 
	     List<String> list = new ArrayList<String>();
	        list.add(imptimeBegin);
	        list.add(imptimeEnd);
	        return list;
	     
	} 
    
    /*
     * 计算某一天所在周的星期一和星期天的日期
     */
    public static String[] convertWeekByDate(String s) throws Exception {
        String result[] =  new String[2];
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); // 设置时间格式
        Date time = sdf.parse(s);
        Calendar cal = Calendar.getInstance();
        cal.setTime(time);
        // 判断要计算的日期是否是周日,如果是则减一天计算周六的,否则会出问题,计算到下一周去了
        int dayWeek = cal.get(Calendar.DAY_OF_WEEK);// 获得当前日期是一个星期的第几天
        if (1 == dayWeek) {
            cal.add(Calendar.DAY_OF_MONTH, -1);
        }
        cal.setFirstDayOfWeek(Calendar.MONDAY);// 设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一

        int day = cal.get(Calendar.DAY_OF_WEEK);// 获得当前日期是一个星期的第几天

        cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - day);// 根据日历的规则,给当前日期减去星期几与一个星期第一天的差值

        String imptimeBegin = sdf.format(cal.getTime()); //所在周的星期一

        result[0] = imptimeBegin; 

        cal.add(Calendar.DATE, 6);

        String imptimeEnd = sdf.format(cal.getTime()); //所在周的星期日

        result[1] = imptimeEnd;
        return result;

    }

    public static void main(String[] args) {
        System.out.println(DateUtil.getSecondTimestamp());
        System.out.println(DateUtil.getTimeDelta(new Date()));
    }
}

二 、JaxbUtil  Java 对象和 xml 互转工具类

package com.devframe.common.util;

import java.io.StringReader;
import java.io.StringWriter;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;

/**
 * @ClassName: 
 * @Description: 
 * @author DuanZhaoXu
 * @date 2018年8月23日上午8:58:52
 */
public class JaxbXmlUtil {
	 /**
     * JavaBean转换成xml
     *      * 默认编码UTF-8
     *
     * @param obj
     * @return
     */
    public static String convertToXml(Object obj) {
        return convertToXml(obj, "UTF-8");
    }

    /**
     * JavaBean转换成xml
     * @param obj
     * @param encoding
     * @return
     */
    public static String convertToXml(Object obj, String encoding) {
        String result = null;
        try {
            JAXBContext context = JAXBContext.newInstance(obj.getClass());
            Marshaller marshaller = context.createMarshaller();
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
            marshaller.setProperty(Marshaller.JAXB_ENCODING, encoding);
            StringWriter writer = new StringWriter();
            marshaller.marshal(obj, writer);
            result = writer.toString();
        } catch (Exception e) {
            e.printStackTrace();
        }

        return result;
    }

    /**
     * xml转换成JavaBean
     * @param xml
     * @param c
     * @return
     */
    @SuppressWarnings("unchecked")
    public static <T> T converyToJavaBean(String xml, Class<T> c) {
        T t = null;
        try {
            JAXBContext context = JAXBContext.newInstance(c);
            Unmarshaller unmarshaller = context.createUnmarshaller();
            t = (T) unmarshaller.unmarshal(new StringReader(xml));
        } catch (Exception e) {
            e.printStackTrace();
        }

        return t;
    }
}

三 、MapRemoveNullUtil  移除map中空key或者value空值 的工具类

package com.devframe.common.util;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class MapRemoveNullUtil {

	/**
	 * 移除map中空key或者value空值
	 * 
	 * @param map
	 */
	public static void removeNullEntry(Map map) {
		removeNullKey(map);
		removeNullValue(map);
	}

	/**
	 * 移除map的空key
	 * 
	 * @param map
	 * @return
	 */
	public static void removeNullKey(Map map) {
		Set set = map.keySet();
		for (Iterator iterator = set.iterator(); iterator.hasNext();) {
			Object obj = (Object) iterator.next();
			remove(obj, iterator);
		}
	}

	/**
	 * 移除map中的value空值
	 * 
	 * @param map
	 * @return
	 */
	public static void removeNullValue(Map map) {
		Set set = map.keySet();
		for (Iterator iterator = set.iterator(); iterator.hasNext();) {
			Object obj = (Object) iterator.next();
			Object value = (Object) map.get(obj);
			remove(value, iterator);
		}
	}

	/**
	 * Iterator 是工作在一个独立的线程中,并且拥有一个 mutex 锁。 Iterator
	 * 被创建之后会建立一个指向原来对象的单链索引表,当原来的对象数量发生变化时,这个索引表的内容不会同步改变,
	 * 所以当索引指针往后移动的时候就找不到要迭代的对象,所以按照 fail-fast 原则 Iterator 会马上抛出
	 * java.util.ConcurrentModificationException 异常。 所以 Iterator
	 * 在工作的时候是不允许被迭代的对象被改变的。 但你可以使用 Iterator 本身的方法 remove() 来删除对象,
	 * Iterator.remove() 方法会在删除当前迭代对象的同时维护索引的一致性。
	 * 
	 * @param obj
	 * @param iterator
	 */
	private static void remove(Object obj, Iterator iterator) {
		if (obj instanceof String) {
			String str = (String) obj;
			if (StringUtil.isNull(str)) {
				iterator.remove();
			}
		} else if (obj instanceof Collection) {
			Collection col = (Collection) obj;
			if (col == null || col.isEmpty()) {
				iterator.remove();
			}

		} else if (obj instanceof Map) {
			Map temp = (Map) obj;
			if (temp == null || temp.isEmpty()) {
				iterator.remove();
			}

		} else if (obj instanceof Object[]) {
			Object[] array = (Object[]) obj;
			if (array == null || array.length <= 0) {
				iterator.remove();
			}
		} else {
			if (obj == null) {
				iterator.remove();
			}
		}
	}

	public static void main(String[] args) {
		Map map = new HashMap();
		map.put(1, "第一个值是数字");
		map.put("2", "第2个值是字符串");
		map.put(new String[] { "1", "2" }, "第3个值是数组");
		map.put(new ArrayList(), "第4个值是List");
		map.put(new HashMap(), "Map 无值");
		map.put("5", "第5个");
		map.put("6", null);
		map.put("asd", "asdasd");
		map.put("7", "");
		map.put("8", "  ");
		System.out.println(map);
		MapRemoveNullUtil.removeNullKey(map);
		System.out.println();
		System.out.println(map);
		MapRemoveNullUtil.removeNullValue(map);
		System.out.println();
		System.out.println(map);
	}
}

 四、MD5Util md5 加密工具类

package com.devframe.common.util;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
 * @ClassName: MD5Util
 * @Description: MD5加密工具类
 * @author DuanZhaoXu
 * @date 2018年3月13日 上午9::15:25
 * 
 */
public class MD5Util {
	private MD5Util() {

	}

	public static String getEncryption(String originString) {
		String result = "";
		try {
			if (originString != null) {
				try {
					// 指定加密的方式为MD5
					MessageDigest md = MessageDigest.getInstance("MD5");
					// 进行加密运算
					byte bytes[] = md.digest(originString.getBytes("ISO8859-1"));
					for (int i = 0; i < bytes.length; i++) {
						// 将整数转换成十六进制形式的字符串 这里与0xff进行与运算的原因是保证转换结果为32位
						String str = Integer.toHexString(bytes[i] & 0xFF);
						if (str.length() == 1) {
							str += "F";
						}
						result += str;
					}
				} catch (NoSuchAlgorithmException e) {
					e.printStackTrace();
				}
			}
		} catch (Exception e) {
			Log.error(e);
		}
		return result;
	}

	public static void main(String[] args) {
		String aa = MD5Util.getEncryption("12345");
		System.out.println(aa);
	}
}

五 、Properties  工具类 

package com.devframe.common.util;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.util.Properties;

public class PropertyUtil {
    private static final Properties PROP = new Properties();
    /**
     * 设置配置文件的路径
     */
    private static final String PATH = "/config.properties";

	/**
	 * 读取配置文件的内容(key,value)
	 *
     * @param key key
	 * @return key对应的value
	 */
    public static String get(String key) {
		if (PROP.isEmpty()) {
            FileInputStream in = null;
            InputStreamReader reader = null;
            try {
                URL url = PropertyUtil.class.getResource(PATH);
                in = new FileInputStream(url.getPath());
                reader = new InputStreamReader(in, "utf-8");
                PROP.load(reader);
            } catch (IOException e) {
                Log.error(e);
            } finally {
                if (reader != null) {
                    try {
                        reader.close();
                        in.close();
                    } catch (IOException e) {
                        Log.error(e);
                    }
                }
			}
		}
		return PROP.getProperty(key);
	}
}

六 、WinRarUtil   调用WinRAR.exe 解压rar文件工具类

package com.devframe.common.util;

import java.io.File;

/**
 * 调用WinRAR.exe 解压rar文件
 * @ClassName: WinRarUtil
 * @Description: WinRarUtil
 * @author DuanZhaoXu
 * @date 2018年9月15日下午7:21:19
 */
public class WinRarUtil {

	    //服务器需要安装winrar
	    public static final String winrarPath = "C://Program Files//WinRAR//WinRAR.exe"; 
	    public static boolean unrar(String rarFile, String target) {     
	        boolean bool = false;     
	        File f=new File(rarFile);  
	        if(!f.exists()){  
	            return false;  
	        }  
	        String cmd = winrarPath + " X " + f.getPath() + " "+target;    
	        try {     
	            Process proc = Runtime.getRuntime().exec(cmd);     
	            if (proc.waitFor() != 0) {     
	                if (proc.exitValue() == 0) {     
	                    bool = false;     
	                }     
	            } else {     
	                bool = true;     
	            }     
	        } catch (Exception e) {     
	            e.printStackTrace();     
	        }     
	        return bool;     
	    
	    }
	    
	public static void main(String[] args) {
	     WinRarUtil.unrar("C:\\resultdata\\save\\devallinone.rar","C:\\resultdata\\save");	
	}
}


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。