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

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

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

下面附上代码说明:

(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);
                    }
                }
            }
        }
    }
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/2312.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 将文件导入到数据库中_将csv文件导入mysql数据库

    将文件导入到数据库中_将csv文件导入mysql数据库如何将 .sql数据文件导入到SQLsever中?我一开始是准备还原数据库的,结果出现了如下问题。因为它并不是备份文件,所以我们无法进行还原。正确方式:先打开SQLsever2008然后登录,假如出现如下问题则是“对象资源管理器”未开启解决办法,我们打开SQL配置管理器 然后这里是暂停或者是已停止,我们将其打开就行。

    2022年9月27日
    7
  • 2022年Web前端入门的自学路线[通俗易懂]

    2022年Web前端入门的自学路线[通俗易懂]新手入门前端,需要学习的基础内容有很多。

    2022年7月3日
    39
  • Java的运行机制(一)

    Java的运行机制(一)前言:还是那句话,第一、凡是涉及到概念性内容的时候,我都会到官网去确认内容的真实性!第二、我喜欢偏向于原理学习。在java介绍里面,我认为知道这是一门完全面向对象的语言就足够了。我的导师说C++是认为程序员是很强大的,开放了所有的功能权限;Java是认为程序员不是那么全能的,有些危险的操作,不会让你执行。不知道您是否也这么认为呢?目录一、类的结构二、运行机制1、编译方式…

    2022年7月8日
    27
  • 使用PyCharm开发树莓派

    使用PyCharm开发树莓派目录安装并激活 PyCharm 通过 ssh 连接到树莓派 前提 树莓派具备联网功能 即可通过 SSH 连接到树莓派 为了便于开发 如果不是直接使用网线 推荐让树莓派去连接其他热点 比如手机热点 宿舍路由器等 这样是为了能让树莓派上网 方便后期一些包的安装 当连接手机热点时 需要知道树莓派被分配的 ip 查询方式可以看文章 如何查看连接到手机热点的树莓派 IP 地址 注意 PyCharm 社区版没有连接 ssh 的功能 确认 Windows 电脑和树莓派在同一个网络里 在你的 Windows 电脑上安装 PyC

    2025年10月22日
    5
  • Python面试的一些心得,与Python练习题分享

    Python面试的一些心得,与Python练习题分享关于基础项目打算招聘一个自动化运维 主要需求是 python Linux 与 shell 脚本能力 但面试几天发现一些问题 简历虚假这个不管哪行 简历含水量大都是普遍存在的 看简历犀利的一比 一面是能力弱的一腿 谁都希望自己 80 分的能力写成 120 但有时候假的有些离谱 问一两个问题就漏气了 年龄与薪酬目前的 IT 行业 最敢坐地起薪的就是 27 33 这年龄段的 低于范围的往往因为能

    2026年2月4日
    0
  • 特斯拉笔试内容_数据库笔试题

    特斯拉笔试内容_数据库笔试题今天笔试一共两道题,1个小时内答出来,第一题如下两张图所示:正确sql为:selectsensor_id,count(distinctevent_type)fromeventsgroupbysensor_idorderbysensor_id效果如下图:第二道题如下两张图:,答案如下sql:selectid,server_name,casewhenconnections>(selectavg(conne…

    2025年6月21日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号