java web 项目 常用 小工具类 ~~~~
【摘要】 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)