Java我的高效编程之常用函数

来源:互联网 发布:人脸三维重建软件 编辑:程序博客网 时间:2024/05/19 13:16

在开发的过程当中,一些经常用到的函数可以自己保存起来,下次需要使用的时候可以复制粘贴,这样可以大大提高效率。下面博主介绍自己的的几个工具类:时间函数库、文件处理函数库、对象的复制

下面附上代码说明:

(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));    }}

(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;        }      }  }

(3)对象的复制

使用场景:在我们的实际开发当中,经常会遇到这样的情况,一个对象A有几十个属性,对象B包含了对象A所有的属性(属性名称是一样的),对象B还多出那么几个A没有的属性。但是希望把A对象的属性值全部都set进B里面。如果不断的set,get会显得很繁琐。下面就是对象复制的代码(依赖spring):

package com.luo.util;import java.beans.PropertyDescriptor;import java.lang.reflect.Method;import java.lang.reflect.Modifier;import java.math.BigDecimal;import org.springframework.beans.BeansException;import org.springframework.beans.FatalBeanException;import org.springframework.util.Assert;public 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);                    }                }            }        }    }}
7 0
原创粉丝点击