在开发的过程当中,一些经常用到的函数可以自己保存起来,下次需要使用的时候可以复制粘贴,这样可以大大提高效率。下面博主介绍自己的的几个工具类:时间函数库、文件处理函数库、对象的复制
下面附上代码说明:
(1)时间函数库
package com.luo.util;import java.text.ParseException;import java.text.ParsePosition;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;public class LuoDateUtils { /** * @author:罗国辉 * @date: 2015年12月15日 上午9:22:47 * @description:获取现在时间 * @parameter: **/ public static Date getNow() { Date currentTime = new Date(); return currentTime; } /** * @author:罗国辉 * @date: 2015年12月15日 上午9:22:47 * @description: 获取现在日期时间 * @parameter: * @return: 返回字符串格式 yyyy-MM-dd HH:mm:ss **/ public static String getNowDateTimeStr() { Date currentTime = new Date(); SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String dateTimeString = formatter.format(currentTime); return dateTimeString; } /** * @author:罗国辉 * @date: 2015年12月15日 上午9:22:47 * @description: 获取现在时间 日期 * @parameter: * @return: 返回字符串格式yyyyMMdd HHmmss **/ public static String getNowDateTimeStrFormatTwo() { Date currentTime = new Date(); SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMdd HHmmss"); String dateString = formatter.format(currentTime); return dateString; } /** * @author:罗国辉 * @date: 2015年12月15日 上午9:22:47 * @description: 获取现在时间 日期 * @parameter: * @return: 返回字符串格式 yyyy-MM-dd **/ public static String getNowDateStr() { Date currentTime = new Date(); SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); String dateString = formatter.format(currentTime); return dateString; } /** * @author:罗国辉 * @date: 2015年12月15日 上午9:22:47 * @description: 获取现在时间 * @parameter: * @return: 返回字符串格式 HH:mm:ss **/ public static String getTimeStr() { SimpleDateFormat formatter = new SimpleDateFormat("HH:mm:ss"); Date currentTime = new Date(); String timeString = formatter.format(currentTime); return timeString; } /** * @author:罗国辉 * @date: 2015年12月15日 上午9:22:47 * @description:日期时间字符串转日期时间格式 * @parameter: * @return: 返回日期时间格式 **/ public static Date strToDateTime(String strDateTime) { SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); ParsePosition pos = new ParsePosition(0); Date strtodate = formatter.parse(strDateTime, pos); return strtodate; } /** * @author:罗国辉 * @date: 2015年12月15日 上午9:22:47 * @description:日期字符串转日期格式 * @parameter: * @return: 返回日期格式 **/ public static Date strToDate(String strDate) { SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); ParsePosition pos = new ParsePosition(0); Date strtodate = formatter.parse(strDate, pos); return strtodate; } /** * @author:罗国辉 * @date: 2015年12月15日 上午9:22:47 * @description:两个日期时间是否在跨度之内 * @parameter: gapType 跨度类型,如Calendar.YEAR,Calendar.MONTH,Calendar.DAY_OF_YEAR * @parameter: maxGap 最大跨度值 * @return: 返回日期格式 **/ public static boolean isWithInDateGap(String startDate, String endDate, int gapType, int maxGap){ Date startDateTime = null; Date endDateTime = null; startDateTime = strToDateTime(startDate); endDateTime = strToDateTime(endDate); return isWithInDateGap(startDateTime,endDateTime, gapType, maxGap); } public static boolean isWithInDateGap(Date startDate, Date endDate, int gapType, int maxGap) { if (startDate == null) { throw new IllegalArgumentException("The startDate must not be null"); } if (endDate == null) { throw new IllegalArgumentException("The endDate must not be null"); } if (gapType != Calendar.YEAR && gapType != Calendar.MONTH && gapType != Calendar.DAY_OF_YEAR) { throw new IllegalArgumentException( "The value of gapType is invalid"); } Calendar start = Calendar.getInstance(); start.setTime(startDate); start.add(gapType, maxGap); int compare = start.getTime().compareTo(endDate); return compare >= 0; } public static void main(String[] args){ System.out.println(getNow()); System.out.println(getNowDateTimeStr()); System.out.println(getNowDateTimeStrFormatTwo()); System.out.println(getNowDateStr()); System.out.println(getTimeStr()); System.out.println(strToDateTime(getNowDateTimeStr())); System.out.println(strToDate(getNowDateStr())); System.out.println(isWithInDateGap(getNowDateTimeStr(),getNowDateTimeStr() ,Calendar.YEAR,1)); }}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140
- 141
- 142
- 143
- 144
- 145
- 146
- 147
- 148
- 149
- 150
- 151
- 152
- 153
- 154
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
- 90
- 91
- 92
- 93
- 94
- 95
- 96
- 97
- 98
- 99
- 100
- 101
- 102
- 103
- 104
- 105
- 106
- 107
- 108
- 109
- 110
- 111
- 112
- 113
- 114
- 115
- 116
- 117
- 118
- 119
- 120
- 121
- 122
- 123
- 124
- 125
- 126
- 127
- 128
- 129
- 130
- 131
- 132
- 133
- 134
- 135
- 136
- 137
- 138
- 139
- 140
- 141
- 142
- 143
- 144
- 145
- 146
- 147
- 148
- 149
- 150
- 151
- 152
- 153
- 154
(2)文件处理函数库
package com.luo.util;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class LuoFileUtils { /** * 下载文件 * @throws FileNotFoundException */ public static void downFile(HttpServletRequest request, HttpServletResponse response,String fileName) throws FileNotFoundException{ String filePath = request.getSession().getServletContext().getRealPath("/") + "template/" + fileName; InputStream inStream = new FileInputStream(filePath); response.reset(); response.setContentType("bin"); response.addHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\""); byte[] b = new byte[100]; int len; try { while ((len = inStream.read(b)) > 0) response.getOutputStream().write(b, 0, len); inStream.close(); } catch (IOException e) { e.printStackTrace(); } } /** * @author:罗国辉 * @date: 2015年12月15日 上午10:12:21 * @description: 创建文件目录,若路径存在,就不生成 * @parameter: * @return: **/ public static void createDocDir(String dirName) { File file = new File(dirName); if (!file.exists()) { file.mkdirs(); } } /** * @author:罗国辉 * @date: 2015年12月15日 上午10:12:21 * @description: 本地,在指定路径生成文件。若文件存在,则删除后重建。 * @parameter: * @return: **/ public static void isExistsMkDir(String dirName){ File file = new File(dirName); if (!file.exists()) { file.mkdirs(); } } /** * @author:罗国辉 * @date: 2015年12月15日 上午10:15:14 * @description: 创建新文件,若文件存在则删除再创建,若不存在则直接创建 * @parameter: * @return: **/ public static void creatFileByName(File file){ try { if (file.exists()) { file.delete(); } file.createNewFile(); } catch (IOException e) { throw e; } } }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
(3)对象的复制
使用场景:在我们的实际开发当中,经常会遇到这样的情况,一个对象A有几十个属性,对象B包含了对象A所有的属性(属性名称是一样的),对象B还多出那么几个A没有的属性。但是希望把A对象的属性值全部都set进B里面。如果不断的set,get会显得很繁琐。下面就是对象复制的代码(依赖spring):
package com.luo.utilimport java.beans.PropertyDescriptorimport java.lang.reflect.Methodimport java.lang.reflect.Modifierimport java.math.BigDecimalimport org.springframework.beans.BeansExceptionimport org.springframework.beans.FatalBeanExceptionimport org.springframework.util.Assertpublic abstract class CopyObjectUtils extends org.springframework.beans.BeanUtils { public static void copyProperties(Object source, Object target) throws BeansException { Assert.notNull(source, "Source must not be null") Assert.notNull(target, "Target must not be null") Class<?> actualEditable = target.getClass() PropertyDescriptor[] targetPds = getPropertyDescriptors(actualEditable) for (PropertyDescriptor targetPd : targetPds) { if (targetPd.getWriteMethod() != null) { PropertyDescriptor sourcePd = getPropertyDescriptor(source.getClass(), targetPd.getName()) if (sourcePd != null && sourcePd.getReadMethod() != null) { try { Method readMethod = sourcePd.getReadMethod() if (!Modifier.isPublic(readMethod.getDeclaringClass().getModifiers())) { readMethod.setAccessible(true) } Object srcValue = readMethod.invoke(source) if(srcValue == null){ continue } Object value=srcValue //转换Double 与 BigDecimal if(sourcePd.getPropertyType().isAssignableFrom( Double.class) && targetPd.getPropertyType().isAssignableFrom(BigDecimal.class)){ value = new BigDecimal((Double)srcValue) } if(sourcePd.getPropertyType().isAssignableFrom( BigDecimal.class) && targetPd.getPropertyType().isAssignableFrom(Double.class)){ value = ((BigDecimal)srcValue).doubleValue() } //转换Long 与 BigDecimal if(sourcePd.getPropertyType().isAssignableFrom( Long.class) && targetPd.getPropertyType().isAssignableFrom(BigDecimal.class)){ value = new BigDecimal((Long)srcValue) } if(sourcePd.getPropertyType().isAssignableFrom( BigDecimal.class) && targetPd.getPropertyType().isAssignableFrom(Long.class)){ value = ((BigDecimal)srcValue).longValue() } //转换String为数字的 与 BigDecimal if(sourcePd.getPropertyType().isAssignableFrom( String.class) && targetPd.getPropertyType().isAssignableFrom(BigDecimal.class)){ String srcValueStr = (String)srcValue if(srcValueStr.matches("^(([1-9]{1}\\d*)|([0]{1}))(\\.(\\d){2})$")){ value = new BigDecimal((String)srcValue) } } // 这里判断以下value是否为空 当然这里也能进行一些特殊要求的处理 例如绑定时格式转换等等 if (value != null) { Method writeMethod = targetPd.getWriteMethod() if (!Modifier.isPublic(writeMethod.getDeclaringClass().getModifiers())) { writeMethod.setAccessible(true) } writeMethod.invoke(target, value) } } catch (Throwable ex) { throw new FatalBeanException("Could not copy properties from source to target", ex) } } } } }}