精华内容
下载资源
问答
  • 本号主要是Java常用关键技术点,通用工具类的分享;以及springboot+springcloud+Mybatisplus+druid+mysql+redis+swagger+maven+docker等集成框架的技术分享;datax、kafka、flink等大数据处理框架的技术分享。文章会...

    介绍语

    本号主要是Java常用关键技术点,通用工具类的分享;以及springboot+springcloud+Mybatisplus+druid+mysql+redis+swagger+maven+docker等集成框架的技术分享;datax、kafka、flink等大数据处理框架的技术分享。文章会不断更新,欢迎码友关注点赞收藏转发!

    望各位码友点击关注,冲1000粉。后面会录制一些视频教程,图文和视频结合,比如:图书介绍网站系统、抢购系统、大数据中台系统等。技术才是程序猿的最爱,码友们冲啊

    如果码友觉得代码太长,可以从头到尾快速扫射一遍,了解大概即可。觉得有用后再转发收藏,以备不时之需。

    正文:

    对象复制工具类,简单好用。但是使用场景好像不多,先收藏

    例子1

    复制学生类到另一个学生类

    import java.time.LocalDate;
     ​
     public class BeanUtilTest {
         public static void main(String[] args) {
             Student student = new Student("zhang三",
                     12, "花果山", LocalDate.of(1990, 2, 26));
             Student studentCopy = new Student();
             BeanCopyUtil.merge(student, studentCopy);
     ​
             System.out.println(studentCopy);
         }
     }
     ​
     // 控制台打印
     Student(name=zhang三, age=12, address=花果山, birthday=1990-02-26)

    例子用到的实体类

    import lombok.AllArgsConstructor;
     import lombok.Data;
     import lombok.NoArgsConstructor;
     ​
     import java.time.LocalDate;
     ​
     @Data
     @AllArgsConstructor
     @NoArgsConstructor
     public class Student {
         private String name;
         private int age;
         private String address;
         private LocalDate birthday;
     }

    工具类源码:

    import org.slf4j.Logger;
     import org.slf4j.LoggerFactory;
     ​
     import java.lang.reflect.Field;
     ​
     /**
      * 对象赋值工具类
      *
      * @author liangxn
      */
     public class BeanCopyUtil {
     ​
         private static final Logger logger = LoggerFactory.getLogger(BeanCopyUtil.class);
     ​
         /**
          * 相同对象合并,将原对象的非空属性的值赋值给目标对象
          *
          * @param origin      源对象
          * @param destination 目标对象
          * @param <T>         对象的类型
          */
         public static <T> void merge(T origin, T destination) {
             if (origin == null || destination == null) {
                 return;
             }
             if (!origin.getClass().equals(destination.getClass())) {
                 return;
             }
     ​
             Field[] fields = origin.getClass().getDeclaredFields();
             for (Field field : fields) {
                 field.setAccessible(true);
                 try {
                     Object value = field.get(origin);
                     if (null != value) {
                         field.set(destination, value);
                     }
                 } catch (IllegalAccessException e) {
                     logger.error("访问对象异常", e);
                 }
                 field.setAccessible(false);
             }
         }
     }

    鄙人编码十年多,在项目中也积累了一些工具类,很多工具类在每个项目都有在用,很实用。大部分是鄙人封装的,有些工具类是同事封装的,有些工具类已经不记得是ctrl+c的还是自己封装的了,现在有空就会总结项目中大部分的工具类,分享给各位码友。如果文章中涉及的代码有侵权行为请通知鄙人处理。

    计划是先把工具类整理出来,正所谓工欲善其事,必先利其器。项目中不管是普通单体项目还是多模块maven项目或是分布式微服务,一部分功能模块都是可以重用的,工具类模块就是其中之一。

    展开全文
  • 大批量数据复制工具Fastcopy评测

    千次阅读 2021-06-25 14:15:23
    复制默认是:复制(大小/日期),我认为这里是软件翻译的事,应该是复制而不是差异。 第三步,点击执行 我是从服务器上在两个不同的NAS存储之间进行拷贝,选择了一个186G的文件夹进行测试,里面共包含约8W个子...

    工作中需要从服务器拷贝10T数据,使用Fastcopy进行测试。

    1,fastcopy,版本v3.92,文件很小,总共不到1MB

    第一步,选择来源和目标目录;


    第二步,选择操作模式,此软件支持复制、同步和删除。

    复制默认是:复制(大小/日期),我认为这里是软件翻译的事,应该是复制而不是差异。

    第三步,点击执行

    我是从服务器上在两个不同的NAS存储之间进行拷贝,选择了一个186G的文件夹进行测试,里面共包含约8W个子文件夹,测试结果如下:

    186G的文件,NAS存储之间拷贝用时1.5个小时,平均速度35.21MB。
    按一天24h计算预计可以拷贝2.9T数据。
    然后我在本地测试了一个0.48G的文件夹,拷贝用时30秒,平均速度16MB。
    速度差异主要是由于文件类型不同,网络环境不同。

    ————————————————————————————————————

    2021.11.17更新
    大批量数据拷贝时建议勾选验证模式,验证模式会对拷贝到新磁盘中的文件进行拷贝前后对比,也就是说验证只对软件拷贝过程负责,并对异常情况输出记录,比如我实际操作中,有因磁盘限制文件名长度导致某个文件失败的,有网络异常中断的。凡是输出的记录,都应逐一对比2个磁盘对应文件,个别文件会因为拷贝异常导致拷贝后的文件增大。最近替换了一批国产化磁盘,性能有所影响,同时,不同的数据结构读写速率也不同,在验证模式下实际拷贝速率大约1T~2T每天。

    展开全文
  • 1. BeanUtils.copyProperties(Object source, Object target)用法: 讲source的属性值复制到target,属性为null时也会进行复制。需求:排除null值进行复制public class CopyObjectUtil {public static String[] ...

    1. BeanUtils.copyProperties(Object source, Object target)

    用法: 讲source的属性值复制到target,属性为null时也会进行复制。

    需求:排除null值进行复制

    public class CopyObjectUtil {

    public static String[] getNullPropertyNames(Object source) {

    final BeanWrapper src = new BeanWrapperImpl(source);

    java.beans.PropertyDescriptor[] pds = src.getPropertyDescriptors();

    Set emptyNames = new HashSet();

    for (java.beans.PropertyDescriptor pd : pds) {

    Object srcValue = src.getPropertyValue(pd.getName());

    if (srcValue == null) emptyNames.add(pd.getName());

    }

    String[] result = new String[emptyNames.size()];

    return emptyNames.toArray(result);

    }

    public static void copyPropertiesIgnoreNull(Object src, Object target) {

    BeanUtils.copyProperties(src, target, getNullPropertyNames(src));

    }

    }

    使用方式与BeanUtils.copyProperties相同:

    CopyObjectUtil.copyPropertiesIgnoreNull(Object source, Object target);

    2. BeanUtils.copyProperties(Object source, Object target, new String[] { "id", "createDate", "modifyDate" })

    用法:排除指定字段进行复制

    展开全文
  • 1. 什么是clipboard.js?...简而言之,就是现代化的文本复制工具,不依赖Flash,不不赖框架,压缩后仅3kb大小。 总之,使用该脚本工具,可以轻松实现文本复制。 2. 哪里下载? 在官网就提供了下载链接。 可以使用

    我的微信公众号知行校园汇,点击查看,欢迎关注


    我的其他平台(点击蓝字可访问):

    GitHub  |  Gitee  |  哔哩哔哩  |  语雀  |  简书  |  微信小程序  |  知行达摩院

    1. 什么是clipboard.js?

    在clipboard.js官网(网址:https://clipboardjs.com/)上,它是这么介绍的:

    A modern approach to copy text to clipboard
    No Flash. No frameworks. Just 3kb gzipped

    简而言之,就是现代化的文本复制工具,不依赖Flash,不不赖框架,压缩后仅3kb大小

    总之,使用该脚本工具,可以轻松实现文本复制。

    2. 哪里下载?

    在官网就提供了下载链接。

    可以使用npm工具安装:

    npm install clipboard --save
    

    或者直接下载压缩包,链接:https://github.com/zenorocha/clipboard.js/archive/master.zip

    3. 使用

    使用的时候,只需要使用script命令,引入该文件即可:

    <script src="dist/clipboard.min.js"></script>
    

    4. 使用方法概述

    4.1 基本的使用方法

    首先给input,或者textarea等,甚至于div元素,设置id,以及value值或者默认值;

    然后设置点击按钮input或者button,通过 data-clipboard-actiondata-clipboard-target 属性,绑定事件;

    最后在js中实例化clipboard。

    如下示例,将给出完整的基本示例,详细过程请见注释:

    <!-- 该代码可直接创建HTML文件运行 -->
    <html lang="zh-CN">
      <head>
        <meta charset="UTF-8" />
        <title>target-input</title>
        <meta name="viewport" content="width=device-width, initial-scale=1" />
      </head>
      <body>
        <!-- 1. 定义一些标记 -->
        <!-- 2. 设置按钮 -->
          
        <!-- 示例1:复制input元素的value值 -->  
        <input id="foo" type="text" value="这是input元素的value值" />
        <button class="btn" data-clipboard-action="copy" data-clipboard-target="#foo">点击复制</button> 
         
        <!-- 示例2:剪切textarea元素的值 -->
        <textarea id="bar">这里的文本可被复制或者剪切</textarea>
        <button class="btn" data-clipboard-action="cut" data-clipboard-target="#bar">点击剪切文字</button>
          
        <!-- 示例3:复制div元素的值 -->
        <div>这是div元素里的文字</div>
        <button class="btn" data-clipboard-action="copy" data-clipboard-target="div">复制来自div的文字</button>
    
        <!-- 示例4:复制button自己设置的值 -->
        <button class="btn" data-clipboard-text="这里的文字将被复制">复制自己的文字</button>
          
        <!-- 3. 引入库文件 -->
        <!--  <script src="../dist/clipboard.min.js"></script> -->
        <script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.6/clipboard.min.js"></script>
    
        <script>
          //4. 实例化clipboard
          var clipboard = new ClipboardJS('.btn');
    
          //5. 复制成功的响应事件【按F12控制台可见】
          clipboard.on('success', function (e) {
            console.log(e);
            //打印动作信息(copy或者cut)
            console.info('Action:', e.action);
            //打印复制的文本
            console.info('Text:', e.text);
            //打印trigger
            console.info('Trigger:', e.trigger);
          });
    
          //6. 复制失败的响应事件
          clipboard.on('error', function (e) {
            console.log(e);          
            console.error('Action:', e.action);
            console.error('Trigger:', e.trigger);
          });
        </script>
      </body>
    </html>
    

    当然,在上面这个代码的第2步,data-clipboard-action 除了可以为 copy ,还可以为 cut ,但是只能对<input> 或者 <textarea> 元素生效。

    4.2 高级用法

    可以通过返回元素的方式,实现动态设置复制内容:

    <!-- 该代码可直接创建HTML文件运行 -->
    <!DOCTYPE html>
    <html lang="zh-CN">
      <head>
        <meta charset="UTF-8" />
        <title>function-target</title>
        <meta name="viewport" content="width=device-width, initial-scale=1" />
      </head>
      <body>
        <!-- 1. 基本信息定义 -->
        <button class="btn">点击复制</button>
        <div>这里的内容将被复制</div>
    
        <!-- 2. 引入库文件 -->
        <!--  <script src="../dist/clipboard.min.js"></script> -->
        <script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.6/clipboard.min.js"></script>
          
        <script>
          //3. 实例化clipboard
          var clipboard = new ClipboardJS('.btn', {
            target: function () {
              //获取文档中第一个 <div> 元素:
              return document.querySelector('div');
              //返回文档中id为copy-btn的元素
              //document.querySelector("#copy-btn");
              //返回文档中 class="btn" 的第一个元素:
              //document.querySelector(".btn");
              //返回文档中 class="btn" 的第一个 <p> 元素:
              //document.querySelector("p.btn");
              //还有更多方法,可自行百度
            },
          });
    
          //复制成功响应
          clipboard.on('success', function (e) {
            console.log(e);
          });
    
          //复制失败响应
          clipboard.on('error', function (e) {
            console.log(e);
          });
        </script>
      </body>
    </html>
    

    可以通过返回文本的方式,实现动态设置复制内容:

    <!-- 该代码可直接创建HTML文件运行 -->
    <!DOCTYPE html>
    <html lang="zh-CN">
      <head>
        <meta charset="UTF-8" />
        <title>function-text</title>
        <meta name="viewport" content="width=device-width, initial-scale=1" />
      </head>
      <body>
        <!-- 1. 定义基本元素 -->
        <button class="btn">Copy</button>
    
        <!-- 2. 引入库文件 -->
        <!--  <script src="../dist/clipboard.min.js"></script> -->
        <script src="https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.6/clipboard.min.js"></script>
    
        <script>
          //3. 实例化clipboard
          var clipboard = new ClipboardJS('.btn', {
            text: function () {
              return '这里的文本将被复制';
            },
          });
    
          //复制成功响应
          clipboard.on('success', function (e) {
            console.log(e);
          });
    
          //复制失败响应
          clipboard.on('error', function (e) {
            console.log(e);
          });
        </script>
      </body>
    </html>
    

    5. 复制来自AJAX的数据

    那么,问题来了。

    有的业务,需要通过客户端点击的事件,通过ajax,访问数据库后,拿取数据,再进行复制。这种方案如何实现呢?

    其实有比较简单的方法,直接在上面这个代码的 function () 内部,写上ajax响应事件,然后在ajax的success中设置返回文本即可。如下:

    	//3. 实例化clipboard
        var clipboard = new ClipboardJS('.btn', {
            text: function () {
                //return '这里的文本将被复制';
                //
                $.ajax({
                    url: '请求的链接',
                    type: 'POST',
                    //POST的数据
                    data: {
                        _token: $("input[name='_token']").val(),
                        id: $("input[name='id']").val(),
                    },
                    //异步调用关闭
                    async: false,
                    //请求成功:
                    success: function (result) {
                        //返回成功的文本
                        return result.data;
                    },
                    //请求出错
                    error: function (e) {
                        //弹窗提示
                        alert(e.message)
                    }
                });
            },
        });
    

    当然,还有更好的方式。

    下面给出一种比较好的参考方案,是一个通过id请求数据库的一个字段为link(可能为资源分享吧)文本的示例:

    		//定义复制模块JS代码
            const pageCtrl = {
                //发送AJAX请求,生成复制的文本,el是传递数据的
                _codeGenerator: function (el) {
                    const $el = $(el);
                    $.ajax({
                        url: '请求的URL',
                        type: 'POST',
                        data: {
                            _token: el.data('_token'),
                            id: el.data('id'),
                        },
                        //移步请求一定要关闭(false)
                        async: false, 
                        success: function (result) {
                            //可以打印请求后的数据
                            console.log(result.status);
                            //返回成功结果
                            if (result.status === 'success') {
                                $el.data('result', result.data[0].link);
                            }
                            //否则,操作失败,根据具体失败情形提示
                            else {
                                //弹窗提示
                                $.alert(result.msg, '操作失败');   
                                //返回结果不要漏
                                $el.data('result', "");
                            }
                        }
                    });
                },
                /* 复制功能*/
                _clip: function () {
                    const _self = this;
                    const clipboard = new ClipboardJS('.copy-btn', {
                        text: function (el) {
                            //构造参数
                            const $el = $(el);
                            //设置初始值
                            $el.data("_token", $("input[name='_token']").val());
                            $el.data('id', $("input[name='id']").val());
    
                            //ajax请求并设置要复制的字符串
                            _self._codeGenerator($el);
    
                            //返回复制结果
                            return $el.data('result');
                        }
                    });
                    //复制成功后的方法
                    clipboard.on('success', function (e) {
                        // console.log(e.text)
                        $.alert('链接:' + e.text + ' 已复制', '复制成功'                 
                    });
                    //复制失败后的方法 
                    clipboard.on('error', function (e) {
                        console.log(e);
                        $.alert('复制失败,请重试!', '复制失败',)
                    });
                },
                
                //初始化方法          
                init: function () {
                    this._clip();
                }
            };
    
            $(function () {
                //初始化
                pageCtrl.init();
            })
    

    这个示例需要引入JQ(ajax请求)和weui(弹窗,或者把$.alert(‘A’, ‘B’,)修改为普通弹窗alert(A) )。

    当然,如果业务更复杂,可以根据实际进行扩展。

    以上。

    展开全文
  • 通常我们使用手机上的复制粘贴模式,无论 Android 与 iOS 均相同,按住你想要复制的内容,系统会自动选中部分内容,再配合拖拽,完成选择,最后点击复制、剪切或者粘贴。但还是有很多无法选择复制的地方,比如很多...
  • UDiskCopy :U盘批量复制工具 开发背景: 公司出货时软件安装包及其他电子档文件,是采用定制的小容量U盘存储的, 之前是生产人员一个一个手动拷贝到各个U盘,现在量增大,一次要出几十上百个备用, 于是买了USB HUB...
  • CodeCopy开发背景身为开发者一定对于GitHub不陌生,有许多开放源代码项目都能在这里找到,GitHub作为一款基于Git的代码管理工具和协同工具是很优秀的,然而作为代码浏览和搜索工具,就和IDE差的很远了。我们之前介绍...
  • SpringBoot 如何进行对象复制,老鸟们都这么玩的!

    千次阅读 多人点赞 2021-09-23 14:36:08
    今天带来SpringBoot老鸟系列的第四篇,来聊聊在日常开发中如何优雅的实现对象复制。 首先我们看看为什么需要对象复制? 为什么需要对象复制 如上,是我们平时开发中最常见的三层MVC架构模型,编辑操作时Controller...
  • 两个方法: Ctrl+C Ctrl+V:复制粘贴,如果没有选中任何文字则复制粘贴一行 Shift+Alt+Up,Shift+Alt+Down:向上向下复制一行
  • D8(YT88)加密狗破解与加密工具

    千次阅读 2021-06-10 11:23:55
    D8(YT88)加密狗软件加密锁开发工具
  • windows自带的复制粘贴历史工具

    千次阅读 2021-02-10 20:02:15
    文章目录问题解决 问题 有时候需要粘贴很多东西,其实那些粘贴过的东西windows都有记录,当需要的时候只需要点击一下历史记录中的一项又会重新复制其内容 解决
  • 文章目录一、Goreplay 介绍二、Golang环境安装三、Goreplay...Goreplay 是用 Golang 写的一个 HTTP 实时流量复制工具。功能更强大,支持流量的放大、缩小,频率限制,还支持把请求记录到文件,方便回放和分析,也支持和
  • 点击蓝色“陈树义”关注我哟在工作中,我们经常需要将某个页面分享给别人。如果只复制页面链接给别人,别人可能不知道是什么内容,更好的情况是既复制标题又复制链接。这种情况下我们的操作路径是这样...
  • 工具推荐——Hutool工具

    千次阅读 2020-12-29 11:22:55
    Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,使Java拥有函数式语言般的优雅,让Java语言也可以“甜甜的”。 Hutool中的工具方法来自每个用户的精雕细琢,它涵盖了...
  • 1.使用mysql连接工具navcat。 2.点开需要复制的数据库 3.点击右键,选择转存sql文件,根据自己的需求,选择转存数据和结构还是只转存结构 4.点击运行即可。 5.接下到将导出的数据,导入到目标数据库中,...
  • 看客姥爷自行复制运行,可以使用pyinstaller -F ***.py 生成一个小工具给别人使用。 import os import shutil tag = "." + input("请输入后缀格式如(txt) :") lens = len(tag) copy_dir = "./copy/" targetnames...
  • 同步复制与异步复制

    万次阅读 2021-06-21 10:36:30
    主从复制:其中一种设计,包括一个同步的从节点,和一个异步的从节点。 从节点2在接收复制日志之前有一段很长的延迟。通常情况下,复制速度会非常快,例如多数数据库系统可以在一秒之内完成所有从节点的更新。但是,...
  • 前言 不知道大家工作中有没有遇到这种情况 产品不知道从哪搞来的截图就这么粘在需求文档上,你还得一个一个敲,气的我这…… 网上有个资料,死活就是不让你复制,气的我这…… 有篇技术文章,代码全是截图,气的我...
  • 罗马音字体复制大全

    万次阅读 2020-12-30 10:55:57
    罗马音字体复制大全是一款非常好用的特殊文字管理软件,罗马音字体复制大全可以为用户提供各种奇特的文字和符号,各种稀奇古怪的文字都可以生成,绝对是你取ID取网名的神器,让自己成为人群中的焦点,赶快来下载吧!...
  • 10秒教你如何用PS魔棒工具抠图

    千次阅读 2020-12-30 06:04:47
    原标题:10秒教你如何用PS魔棒工具抠图最近有很多新手朋友在学习PS的时候,很懵魔棒工具是什么?怎么用、可不可以抠图、它有没有快捷键之类的问题,这对于刚接触PS的童鞋可能有点摸不着头脑,今天我们就来介绍一下...
  • windows10系统下,用户如果想要使用画图工具的话,都得通过右键-打开方式-画图这种方式来打开,这样不免会有些麻烦。其实,我们只要在Win10系统下把画图小工具添加到桌面就可以了。下面,就随小编看看具体步骤。具体...
  • 一个一个文件打开去复制有点太愚蠢了,就想找找有没有什么自动化处理的工具; 还真的找到一个,下面分享给大家我是怎么用的; 1. 解压压缩包,打开工程: 2. 我用的是VS2017打开毫无障碍: 3. ...
  • 问题:相信很多人在搜索百度的时候,看到...1.按电脑的F12键打开开发人员工具(图的右边就是开发者工具); 2.然后点开发人员工具的小齿轮,然后出现下面的情况; 3.在首选项栏鼠标滑轮往下滑找到调试...
  • Win7双屏复制/双屏扩展设置教程

    千次阅读 2020-12-24 09:16:45
    记得有位IT名人说过:“大屏幕显示器可以提高工作效率!”,因此你能经常在办公室看到同时使用两个...双屏复制模式很多用户家里都有升级换下来的显示器,或者有笔记本电脑、投影机等显示设备,那么将它们连接起来就...
  • java 复制Map对象(深拷贝与浅拷贝)

    千次阅读 2021-03-04 02:22:21
    1.深拷贝与浅拷贝浅拷贝:只复制对象的引用,两个引用仍然指向同一个对象,在内存中占用同一块内存;被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用仍然指向原来的对象;换言之,浅复制...
  • 快速打开字体对话框 在Word中设置字体,都是用常用工具栏或点右键来设置,然而Ctrl+D在word中的这个功能却很少有人用到。 Ctrl+D在Word中,是打开字体设置对话框。 学会快捷键Ctrl+D的使用方法了吗?感觉是不是很牛...
  • 有时候在网上找文字素材的时候,一般做法是直接复制粘贴使用。但你有没有遇到过不能复制的时候?反正小编是有的!好不容易找到了需要的文字却复制不出来,是不是好让人闹心?!有什么办法可以避开这个限制,将网页的...
  • 使用 MHA 实现 MySQL 主从复制高可用

    千次阅读 多人点赞 2020-12-28 09:49:50
    Time-HiRes perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker perl-CPAN [root@manager ~]# rpm -ivh /root/mha/mha4mysql-manager-0.57-0.el7.noarch.rpm 3)Manager 管理工具 在 Manager 节点安装完成后会生成一些...
  • 国产话达梦数据库,常用工具:达梦管理工具,达梦数据迁移工具。 1、达梦管理工具主要类似于navicat,是数据库可视化工具,新建连接输入IP,端口,账号,密码即可连接数据库。 之后在模式中,可以查看该账号权限...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 988,086
精华内容 395,234
关键字:

复制工具