Hutool中那些常用的工具类和实用方法 | 京东云技术团队

news2024/11/18 9:26:58

❓背景

灵魂拷问1:还在为新项目工具类搬迁而烦恼?

灵魂拷问2:还在为项目中工具类维护而烦恼?

📘简述

**Hutool**它是一个Java工具集类库,包含了很多静态方法的封装:流处理、时间日期处理、正则处理、加解密处理、文件处理、集合处理等,可以说是项目中几乎所有XxxxUtil的替代品,它可以使你更多的关注代码逻辑,优雅的写出高效代码,避免“复制粘贴,改改再战”。

”🛠️组件

模块划分预览,可以根据需求对每个模块单独引入,也可以通过引入hutool-all方式引入所有模块。

模块介绍
hutool-aopJDK动态代理封装,提供非IOC下的切面支持
hutool-bloomFilter布隆过滤,提供一些Hash算法的布隆过滤
hutool-cache简单缓存实现
hutool-core核心,包括Bean操作、日期、各种Util等
hutool-cron定时任务模块,提供类Crontab表达式的定时任务
hutool-crypto加密解密模块,提供对称、非对称和摘要算法封装
hutool-dbJDBC封装后的数据操作,基于ActiveRecord思想
hutool-dfa基于DFA模型的多关键字查找
hutool-extra扩展模块,对第三方封装(模板引擎、邮件、Servlet、二维码、Emoji、FTP、分词等)
hutool-http基于HttpUrlConnection的Http客户端封装
hutool-log自动识别日志实现的日志门面
hutool-script脚本执行封装,例如Javascript
hutool-setting功能更强大的Setting配置文件和Properties封装
hutool-system系统参数调用封装(JVM信息等)
hutool-jsonJSON实现
hutool-captcha图片验证码实现
hutool-poi针对POI中Excel和Word的封装
hutool-socket基于Java的NIO和AIO的Socket封装
hutool-jwtJSON Web Token (JWT)封装实现

☀️常用

⚠️只列举部分方法,详细可查看源码学习!!!

1、核心工具集

1.1、日期时间工具-DateUtil

日期转换再常用不过了,字符串转日期格式、日期格式转指定字符串格式、获取当前系统日期、时间差

// 自定义日期格式转化
String dateStr = "2017-03-01";
Date date = DateUtil.parse(dateStr, "yyyy-MM-dd");

1.2、农历日期-ChineseDate

提供了生肖、天干地支、传统节日等方法。

//通过公历构建
ChineseDate date = new ChineseDate(DateUtil.parseDate("2020-01-25"));
// 一月
date.getChineseMonth();
// 正月
date.getChineseMonthName();
// 初一
date.getChineseDay();
// 庚子
date.getCyclical();
// 生肖:鼠
date.getChineseZodiac();
// 传统节日(部分支持,逗号分隔):春节
date.getFestivals();
// 庚子鼠年 正月初一
date.toString();

1.3、计时器工具-TimeInterval

计算方法或过程执行的时间,支持分组计时,方便对比时间

TimeInterval timer = DateUtil.timer();

//---------------------------------
//-------这是执行过程
//---------------------------------

timer.interval();//花费毫秒数
timer.intervalRestart();//返回花费时间,并重置开始时间
timer.intervalMinute();//花费分钟数

1.4、文件类型判断-FileTypeUtil

在文件上传时,有时候我们需要判断文件类型。但是又不能简单的通过扩展名来判断(防止恶意脚本等通过上传到服务器上),于是我们需要在服务端通过读取文件的首部几个二进制位来判断常用的文件类型。

File file = FileUtil.file("d:/test.jpg");
String type = FileTypeUtil.getType(file);
//输出 jpg则说明确实为jpg文件
Console.log(type);

1.5、符串工具-StrUtil

这个工具的用处类似于 Apache Commons Lang 中的StringUtil,字符串判空操作就不再累述,StrUtil只做增强:sub、removePrefix、removeSuffix

// 去掉字符串的后缀,例如去个文件名的扩展名。
String fileName = StrUtil.removeSuffix("pretty_girl.jpg", ".jpg")  //fileName -> pretty_girl

1.6、16进制工具-HexUtil

16进制一般针对无法显示的一些二进制进行显示,常用于: 1、图片的字符串表现形式 2、加密解密 3、编码转换

String str = "我是一个字符串";

String hex = HexUtil.encodeHexStr(str, CharsetUtil.CHARSET_UTF_8);

//hex是:
//e68891e698afe4b880e4b8aae5ad97e7aca6e4b8b2

String decodedStr = HexUtil.decodeHexStr(hex);

//解码后与str相同

1.7、Escape工具-EscapeUtil

转义和反转义工具类Escape / Unescape。escape采用ISO Latin字符集对指定的字符串进行编码。所有的空格符、标点符号、特殊字符以及其他非ASCII字符都将被转化成%xx格式的字符编码(xx等于该字符在字符集表里面的编码的16进制数字)。此类中的方法对应Javascript中的 escape() 函数和 unescape() 函数。

1.8、URL工具-URLUtil

URL(Uniform Resource Locator)中文名为统一资源定位符,有时也被俗称为网页地址。表示为互联网上的资源,如网页或者FTP地址。在Java中,也可以使用URL表示Classpath中的资源(Resource)地址。

URLUtil.normalize 标准化化URL链接。对于不带http://头的地址做简单补全。

String url = "http://www.hutool.cn//aaa/bbb";
// 结果为:http://www.hutool.cn/aaa/bbb
String normalize = URLUtil.normalize(url);

url = "http://www.hutool.cn//aaa/\\bbb?a=1&b=2";
// 结果为:http://www.hutool.cn/aaa/bbb?a=1&b=2
normalize = URLUtil.normalize(url);

URLUtil.encode 封装URLEncoder.encode,将需要转换的内容(ASCII码形式之外的内容),用十六进制表示法转换出来,并在之前加上%开头。

String body = "366466 - 副本.jpg";
// 结果为:366466%20-%20%E5%89%AF%E6%9C%AC.jpg
String encode = URLUtil.encode(body);

1.9、枚举工具-EnumUtil

枚举(enum)算一种“语法糖”,是指一个经过排序的、被打包成一个单一实体的项列表。一个枚举的实例可以使用枚举项列表中任意单一项的值。枚举在各个语言当中都有着广泛的应用,通常用来表示诸如颜色、方式、类别、状态等等数目有限、形式离散、表达又极为明确的量。Java从JDK5开始,引入了对枚举的支持。

//定义枚举 
public enum TestEnum{ 

    TEST1("type1"), TEST2("type2"), TEST3("type3"); 
    
    private TestEnum(String type) { 
        this.type = type; 
    } 
    
    private String type; 
    
    public String getType() { 
        return this.type; 
    } 
}

// 获取枚举类中所有枚举对象的name列表
List<String> names = EnumUtil.getNames(TestEnum.class); //结果:[TEST1, TEST2, TEST3]

// 获得枚举类中各枚举对象下指定字段的值
List<Object> types = EnumUtil.getFieldValues(TestEnum.class, "type"); //结果:[type1, type2, type3]

1.10、数字工具-NumberUtil

数字工具针对数学运算做工具性封装

// 格式化为指定字符串
long c = 299792458;//光速
String format = NumberUtil.decimalFormat(",###", c);//299,792,458

1.11、数组工具-ArrayUtil

数组工具类主要针对原始类型数组和泛型数组相关方案进行封装

// 数组判空
int[] a = {}; 
int[] b = null; 
ArrayUtil.isEmpty(a); 
ArrayUtil.isEmpty(b);

1.12、随机工具-RandomUtil

RandomUtil主要针对JDK中Random对象做封装,严格来说,Java产生的随机数都是伪随机数,因此Hutool封装后产生的随机结果也是伪随机结果。不过这种随机结果对于大多数情况已经够用。

// 例如我们想产生一个[10, 100)的随机数,则:
int c = RandomUtil.randomInt(10, 100);

1.13、唯一ID工具-IdUtil

在分布式环境中,唯一ID生成应用十分广泛,生成方法也多种多样,Hutool针对一些常用生成策略做了简单封装。包括 **UUID****ObjectId(MongoDB)****Snowflake(Twitter)**

// 生成的UUID是带-的字符串,类似于:a5c8a5e8-df2b-4706-bea4-08d0939410e3
String uuid = IdUtil.randomUUID();

// 生成的是不带-的字符串,类似于:b17f24ff026d40949c85a24f4f375d42
String simpleUUID = IdUtil.simpleUUID();

1.14、正则工具-ReUtil

在文本处理中,正则表达式几乎是全能的,但是Java的正则表达式有时候处理一些事情还是有些繁琐

// 给定字符串是否匹配给定正则
String content = "ZZZaaabbbccc中文1234";
boolean isMatch = ReUtil.isMatch("\\w+[\u4E00-\u9FFF]+\\d+", content);
Assert.assertTrue(isMatch);

1.15、身份证工具-IdcardUtil

支持大陆15位、18位身份证,港澳台10位身份证

String ID_18 = "321083197812162119";
String ID_15 = "150102880730303";

//是否有效
boolean valid = IdcardUtil.isValidCard(ID_18);
boolean valid15 = IdcardUtil.isValidCard(ID_15);

//转换
String convert15To18 = IdcardUtil.convert15To18(ID_15);

//年龄
DateTime date = DateUtil.parse("2017-04-10");   
int age = IdcardUtil.getAgeByIdCard(ID_18, date);
int age2 = IdcardUtil.getAgeByIdCard(ID_15, date);

//生日
String birth = IdcardUtil.getBirthByIdCard(ID_18);
String birth2 = IdcardUtil.getBirthByIdCard(ID_15);


//省份
String province = IdcardUtil.getProvinceByIdCard(ID_18);
String province2 = IdcardUtil.getProvinceByIdCard(ID_15);

1.16、信息脱敏工具-DesensitizedUtil

在数据处理或清洗中,可能涉及到很多隐私信息的脱敏工作,因此Hutool针对常用的信息封装了一些脱敏方法。

// 以身份证号码为例:5***************1X
DesensitizedUtil.idCardNum("51343620000320711X", 1, 2);

1.17、社会信用代码工具-CreditCodeUtil

法人和其他组织统一社会信用代码制度,相当于让法人和其他组织拥有了一个全国统一的“身份证号”,由一下五部分组成: 第一部分:登记管理部门代码1位 (数字或大写英文字母) 第二部分:机构类别代码1位 (数字或大写英文字母) 第三部分:登记管理机关行政区划码6位 (数字) 第四部分:主体标识码(组织机构代码)9位 (数字或大写英文字母) 第五部分:校验码1位 (数字或大写英文字母)

// 校验是否为社会信用代码
String testCreditCode = "91310110666007217T";
// true
CreditCodeUtil.isCreditCode(testCreditCode);

1.18、字段验证器-Validator

验证给定字符串是否满足指定条件,一般用在表单字段验证里。

// 验证是否为邮箱
boolean isEmail = Validator.isEmail("loolly@gmail.com")

// 如无法满足需求,可通过该正则验证
Validator.isMactchRegex("需要验证字段的正则表达式", "被验证内容")

1.19、Bean工具-BeanUtil

Bean工具类主要是针对这些setXXX和getXXX方法进行操作,比如将Bean对象转为Map等等

// 使用Map填充bean
HashMap<String, Object> map = CollUtil.newHashMap();
map.put("name", "Joe");
map.put("age", 12);
map.put("openId", "DFDFSDFWERWER");

SubPerson person = BeanUtil.fillBeanWithMap(map, new SubPerson(), false);

1.20、集合工具-CollUtil

这个工具主要增加了对数组、集合类的操作。

// 将集合转换为字符串
String[] col= new String[]{"a","b","c","d","e"};
List<String> colList = CollUtil.newArrayList(col);

String str = CollUtil.join(colList, "#"); //str -> a#b#c#d#e

1.21、列表工具-ListUtil

**List** 在集合中中使用最为频繁,因此新版本的Hutool中针对List单独封装了工具方法。

// 列表截取
final List<Integer> of = ListUtil.of(1, 2, 3, 4);

// [3, 4]
final List<Integer> sub = ListUtil.sub(of, 2, 4);

// 对子列表操作不影响原列表
sub.remove(0);

1.22、Unicode编码转换工具-UnicodeUtil

此工具主要针对类似于\\u4e2d\\u6587这类Unicode字符做一些特殊转换。

// 字符串转Unicode 第二个参数true表示跳过ASCII字符(只跳过可见字符)
String s = UnicodeUtil.toUnicode("aaa123中文", true); //结果aaa123\\u4e2d\\u6587

// Unicode转字符串
String res = UnicodeUtil.toString("aaa\\U4e2d\\u6587\\u111\\urtyu\\u0026"); //结果aaa中文\\u111\\urtyu&

1.23、Map工具-MapUtil

MapUtil是针对Map的一一列工具方法的封装,包括getXXX的快捷值转换方法。

// reverse Map的键和值互换
Map<String, String> map = MapUtil.newHashMap();
        map.put("a", "1");
        map.put("b", "2");
        map.put("c", "3");
        map.put("d", "4");

Map<String, String> map2 = MapUtil.reverse(map);

结果为:

{
   "1": "a",
   "2": "b",
   "3": "c",
   "4": "d",
}

1.24、Base64编码解码

Base64编码是用64(2的6次方)个ASCII字符来表示256(2的8次方)个ASCII字符,也就是三位二进制数组经过编码后变为四位的ASCII字符显示,长度比原来增加1/3。

String a = "伦家是一个非常长的字符串";
// 5Lym5a625piv5LiA5Liq6Z2e5bi46ZW/55qE5a2X56ym5Liy
String encode = Base64.encode(a);

// 还原为a
String decodeStr = Base64.decodeStr(encode);

1.25、数学相关-MathUtil

此工具是NumberUtil的一个补充,NumberUtil偏向于简单数学计算的封装,MathUtil偏向复杂数学计算。

1.26、图片工具-ImgUtil

针对awt中图片处理进行封装,这些封装包括:缩放、裁剪、转为黑白、加水印等操作。

// 图片类型转换png->jpg
ImgUtil.convert(FileUtil.file("e:/test2.png"), FileUtil.file("e:/test2Convert.jpg"));

// 彩色转黑白
ImgUtil.gray(FileUtil.file("d:/logo.png"), FileUtil.file("d:/result.png"));

// 添加文字水印
ImgUtil.pressText(
    FileUtil.file("e:/pic/face.jpg"),  
    FileUtil.file("e:/pic/test2_result.png"), 
    "版权所有", Color.WHITE, //文字 
    new Font("黑体", Font.BOLD, 100), //字体 
    0, //x坐标修正值。 默认在中间,偏移量相对于中间偏移 
    0, //y坐标修正值。 默认在中间,偏移量相对于中间偏移 
    0.8f//透明度:alpha 必须是范围 [0.0, 1.0] 之内(包含边界值)的一个浮点数字 
);

1.27、网络工具-NetUtil

在日常开发中,网络连接这块儿必不可少。日常用到的一些功能,隐藏掉部分IP地址、绝对相对路径的转换等等。

String ip= "127.0.0.1";
long iplong = 2130706433L;

// 根据long值获取ip v4地址
String ip= NetUtil.longToIpv4(iplong);


// 根据ip地址计算出long型的数据
long ip= NetUtil.ipv4ToLong(ip);

// 检测本地端口可用性
boolean result= NetUtil.isUsableLocalPort(6379);

// 是否为有效的端口
boolean result= NetUtil.isValidPort(6379);

// 隐藏掉IP地址
String result =NetUtil.hideIpPart(ip);

2、JSON

2.1、JSON工具-JSONUtil

针对JSONObject和JSONArray的静态快捷方法集合

// JSON字符串解析
String html = "{\"name\":\"Something must have been changed since you leave\"}";
JSONObject jsonObject = JSONUtil.parseObj(html);
jsonObject.getStr("name");

// XML字符串转JSON
String s = "<sfzh>123</sfzh><sfz>456</sfz><name>aa</name><gender>1</gender>"; 
JSONObject json = JSONUtil.parseFromXml(s); 
json.get("sfzh"); 
json.get("name");

// JSON转XML
final JSONObject put = JSONUtil.createObj().set("aaa", "你好").set("键2", "test"); 
// <aaa>你好</aaa><键2>test</键2> 
final String s = JSONUtil.toXmlStr(put);

// JSON转Bean
String json = "{\"ADT\":[[{\"BookingCode\":[\"N\",\"N\"]}]]}"; 
Price price = JSONUtil.toBean(json, Price.class); 
price.getADT().get(0).get(0).getBookingCode().get(0);

3、加密解密

3.1、加密解密工具-SecureUtil

SecureUtil主要针对常用加密算法构建快捷方式,还有提供一些密钥生成的快捷工具方法。

// AES对称加解密
String content = "test中文";

// 随机生成密钥
byte[] key = SecureUtil.generateKey(SymmetricAlgorithm.AES.getValue()).getEncoded();

// 构建
AES aes = SecureUtil.aes(key);

// 加密
byte[] encrypt = aes.encrypt(content);
// 解密
byte[] decrypt = aes.decrypt(encrypt);

// 加密为16进制表示
String encryptHex = aes.encryptHex(content);
// 解密为字符串
String decryptStr = aes.decryptStr(encryptHex, CharsetUtil.CHARSET_UTF_8);

4、HTTP客户端

4.1、Http客户端工具类-HttpUtil

基于JDK的HttpUrlConnection封装完成,完整支持https、代理和文件上传、以及URL参数编解码等。

GET请求栗子:

// 最简单的HTTP请求,可以自动通过header等信息判断编码,不区分HTTP和HTTPS
String result1= HttpUtil.get("https://www.baidu.com");

// 当无法识别页面编码的时候,可以自定义请求页面的编码
String result2= HttpUtil.get("https://www.baidu.com", CharsetUtil.CHARSET_UTF_8);

//可以单独传入http参数,这样参数会自动做URL编码,拼接在URL中
HashMap<String, Object> paramMap = new HashMap<>();
paramMap.put("city", "北京");

String result3= HttpUtil.get("https://www.baidu.com", paramMap);

POST请求栗子:

HashMap<String, Object> paramMap = new HashMap<>();
paramMap.put("city", "北京");

String result= HttpUtil.post("https://www.baidu.com", paramMap);

文件上传栗子:

HashMap<String, Object> paramMap = new HashMap<>();
//文件上传只需将参数中的键指定(默认file),值设为文件对象即可,对于使用者来说,文件上传与普通表单提交并无区别
paramMap.put("file", FileUtil.file("D:\\face.jpg"));

String result= HttpUtil.post("https://www.baidu.com", paramMap);

4.2、HTML工具类-HtmlUtil

如我们在使用爬虫爬取HTML页面后,需要对返回页面的HTML内容做一定处理,比如去掉指定标签(例如广告栏等)、去除JS、去掉样式等等,这些操作都可以使用 HtmlUtil 完成。

// 转义HTML特殊字符
String html = "<html><body>123'123'</body></html>";
// 结果为:<html><body>123'123'</body></html>
String escape = HtmlUtil.escape(html);

// 还原被转义的HTML特殊字符
String escape = "<html><body>123'123'</body></html>"; 
// 结果为:<html><body>123'123'</body></html> 
String unescape = HtmlUtil.unescape(escape);

// 清除指定HTML标签和被标签包围的内容
String str = "pre<img src=\"xxx/dfdsfds/test.jpg\">";
// 结果为:pre 
String result = HtmlUtil.removeHtmlTag(str, "img");


// 清除所有HTML标签,但是保留标签内的内容 
String str = "pre<div class=\"test_div\">\r\n\t\tdfdsfdsfdsf\r\n</div><div class=\"test_div\">BBBB</div>"; 
// 结果为:pre\r\n\t\tdfdsfdsfdsf\r\nBBBB 
String result = HtmlUtil.cleanHtmlTag(str);

// 清除指定HTML标签,不包括内容
String str = "pre<div class=\"test_div\">abc</div>"; 
// 结果为:preabc 
String result = HtmlUtil.unwrapHtmlTag(str, "div");


// 过滤HTML文本,防止XSS攻击
String html = "<alert></alert>"; 
// 结果为:"" 
String filter = HtmlUtil.filter(html);

5、扩展工具集

5.1、拼音工具-PinyinUtil

引入拼音库(TinyPinyin、JPinyin、Pinyin4j)其中任意一个引擎,从而实现获取汉语拼音、拼音首字母

// 获取拼音:"ni hao" 
String pinyin = PinyinUtil.getPinyin("你好", " "); 

// 获取拼音首字母:"h, s, d, y, g"
String result = PinyinUtil.getFirstLetter("H是第一个", ", ");

5.2、Emoji工具-EmojiUtil

引入表情依赖,实现表情转义、表情转html、转义的别名转表情

<!-- 表情依赖 -->
<dependency>
    <groupId>com.vdurmont</groupId>
    <artifactId>emoji-java</artifactId>
    <version>4.0.0</version>
</dependency>
// 转义Emoji字符
String alias = EmojiUtil.toAlias("😄");//:smile:

// 将转义的别名转为Emoji字符
String emoji = EmojiUtil.toUnicode(":smile:");//😄

// 将字符串中的Unicode Emoji字符转换为HTML表现形式
String alias = EmojiUtil.toHtml("😄");//👦

5.3、二维码工具-QrCodeUtil

引入zxing库依赖(理论上你引入的版本应与此版本一致或比这个版本新),实现二维码的生成(二维码可附带logo图标)以及识别二维码

<!-- zxing库依赖 -->
<dependency>
    <groupId>com.google.zxing</groupId>
    <artifactId>core</artifactId>
    <version>3.3.3</version>
</dependency>
// 自定义参数生成指定url对应的二维码到文件
QrConfig config = new QrConfig(300, 300);
// 设置边距,既二维码和背景之间的边距
config.setMargin(3);
// 设置前景色,既二维码颜色(青色)
config.setForeColor(Color.CYAN.getRGB());
// 设置背景色(灰色)
config.setBackColor(Color.GRAY.getRGB());

// 生成二维码到文件,也可以到流
QrCodeUtil.generate("http://hutool.cn/", config, FileUtil.file("e:/qrcode.jpg"));


// 识别二维码(decode -> "http://hutool.cn/" )
String decode = QrCodeUtil.decode(FileUtil.file("d:/qrcode.jpg"));

5.4、邮件工具-MailUtil

Hutool对所有第三方都是可选依赖,因此在使用MailUtil时需要自行引入第三方依赖。支持群发、带附件、自定义邮件服务器

<!-- java-mail依赖 -->
<!-- 说明 com.sun.mail是javax.mail升级后的版本,新版本包名做了变更。 -->
<dependency>
    <groupId>com.sun.mail</groupId>
    <artifactId>javax.mail</artifactId>
    <version>1.6.2</version>
</dependency>
// 发送普通文本邮件,最后一个参数可选是否添加多个附件
MailUtil.send("hutool@foxmail.com", "测试", "邮件来自Hutool测试", false);

// 发送HTML格式的邮件并附带附件,最后一个参数可选是否添加多个附件:
MailUtil.send("hutool@foxmail.com", "测试", "<h1>邮件来自Hutool测试</h1>", true, FileUtil.file("d:/aaa.xml"));

// 群发邮件,可选HTML或普通文本,可选多个附件:
ArrayList<String> tos = CollUtil.newArrayList( 
    "person1@bbb.com", 
    "person2@bbb.com", 
    "person3@bbb.com", 
    "person4@bbb.com"); 
MailUtil.send(tos, "测试", "邮件来自Hutool群发测试", false);

官方文档: https://www.hutool.cn/docs/#/

Github地址: https://github.com/dromara/hutool

Gitee地址: https://gitee.com/dromara/hutool

作者:京东零售 马宏伟

来源:京东云开发者社区 转载请注明来源

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1139756.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SAP BC PP 物料搜索帮助修改

ECC on Oracle 升级S4 on HANA ,公司启用了物料状态 MARA-MSTAE 用户想在做物料搜索帮助里面加上这个 物料状态 参考 <SAP简使-ABAP>自定义搜索帮助 - 知乎 (zhihu.com) 过程如下&#xff1a; 1)spro-物流-常规--物料主数据-工具-维护搜索帮助 以 “MAT1L” 物料&am…

SpringBoot集成Redis Cluster集群(附带Linux部署Redis Cluster高可用集群)

目录 一、前言二、集成配置2.1、POM2.2、添加配置文件application.yml2.3、编写配置文件2.4、编写启动类2.5、编写测试类测试是否连接成功 一、前言 这里会使用到spring-boot-starter-data-redis包&#xff0c;spring boot 2的spring-boot-starter-data-redis中&#xff0c;默…

前端 读取/导入 Excel文档

情况&#xff1a; 需要通过Excel表&#xff0c;将数据导入到数据库&#xff0c;但是后台人员出差了&#xff0c;我又只会PHP&#xff0c;没用过node&#xff0c;所以只能前端导入Excel文件&#xff0c;然后循环调用后台的单条添加接口了。 库&#xff1a; Excel.js&#xff08…

基于Java的宠物商店管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09; 代码参考数据库参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…

03_Flutter自定义下拉菜单

03_Flutter自定义下拉菜单 在Flutter的内置api中&#xff0c;可以使用showMenu实现类似下拉菜单的效果&#xff0c;或者使用PopupMenuButton组件&#xff0c;PopupMenuButton内部也是使用了showMenu这个api&#xff0c;但是使用showMenu时&#xff0c;下拉面板的显示已经被约定…

MedNeXt: Transformer-driven Scaling ofConvNets for Medical Image Segmentation

论文标题;MedNeXt: Transformer-driven Scaling of ConvNets for Medical Image Segmentation 论文链接&#xff1a;2303.09975.pdf (arxiv.org)https://arxiv.org/pdf/2303.09975.pdf 论文&#xff1a; MedNeXt&#xff1a;用于医学图像分割的转换器驱动的ConvNets缩放 项目…

echart绘制环形进度条

原型: <template><div class="chart"><div ref="chartRef" class="chart-bar" :style="{ width, height }"></div><div class="num">{{ sideText }}</div></div> </templa…

一文教你如何将Eclipse项目导入到IDEA运行

&#x1f4d6;本篇超级详细案例截图教学 Eclipse web项目如何导入到Intellij IDEA中&#xff0c;图片点击可放大仔细看 工具版本说明&#xff1a; 工具 版本 Intellij IDEA 2022.3 tomcat 8.5 JDK 1.8 步骤一 .导入一个已存在的工程 1.1 File–>New–>Proj…

损失函数总结(八):MultiMarginLoss、MultiLabelMarginLoss

损失函数总结&#xff08;八&#xff09;&#xff1a;MultiMarginLoss、MultiLabelMarginLoss 1 引言2 损失函数2.1 MultiMarginLoss2.2 MultiLabelMarginLoss 3 总结 1 引言 在前面的文章中已经介绍了介绍了一系列损失函数 (L1Loss、MSELoss、BCELoss、CrossEntropyLoss、NLL…

LIS系统-实现检验报告集中管理

LIS系统即实验室信息管理系统。LIS系统能实现临床检验信息化&#xff0c;检验科信息管理自动化。其主要功能是将检验科的实验仪器传出的检验数据经数据分析后&#xff0c;自动生成打印报告&#xff0c;通过网络存储在数据库中&#xff0c;使医生能够通过医生工作站方便、及时地…

基于springboot实现网吧管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现网吧管理系统演示 摘要 随着信息技术和网络技术的飞速发展&#xff0c;人类已进入全新信息化时代&#xff0c;传统管理技术已无法高效&#xff0c;便捷地管理信息。为了迎合时代需求&#xff0c;优化管理效率&#xff0c;各种各样的管理系统应运而生&#x…

JDK11下载、安装与配置、运行第一个Java程序教程

JDK已经更新到20.0.2了&#xff0c;JDK11是相对比较稳定的版本&#xff0c;网上的JDK11安装配置教程一大堆&#xff0c;但是很多都过时了&#xff0c;自己整理了一篇JDK11下载安装的详细步骤&#xff0c;带有每一步的完整的图文教程&#xff0c;大家可以根据自己的需要下载。 …

pytorch 入门 (五)案例三:乳腺癌识别识别-VGG16实现

本文为&#x1f517;小白入门Pytorch内部限免文章 &#x1f368; 本文为&#x1f517;小白入门Pytorch中的学习记录博客&#x1f366; 参考文章&#xff1a;【小白入门Pytorch】乳腺癌识别&#x1f356; 原作者&#xff1a;K同学啊 在本案例中&#xff0c;我将带大家探索一下深…

pytorch深度学习实践(二):梯度下降算法详解和代码实现(梯度下降、随机梯度下降、小批量梯度下降的对比)

目录 一、梯度下降1.1 公式与原理1.1.1 cost(w)1.1.2 梯度1.1.3 w的更新 1.2 训练过程可视化1.3 代码实现 二、随机梯度下降&#xff08;stochastic gradient descent&#xff0c;SDG&#xff09;2.1 公式与原理2.1.1 w的更新 2.2 代码实现2.3 梯度下降和随机梯度下降的优缺点对…

漏洞复现-jquery-picture-cut 任意文件上传_(CVE-2018-9208)

jquery-picture-cut 任意文件上传_&#xff08;CVE-2018-9208&#xff09; 漏洞信息 jQuery Picture Cut v1.1以下版本中存在安全漏洞CVE-2018-9208文件上传漏洞 描述 ​ picture cut是一个jquery插件&#xff0c;以友好和简单的方式处理图像&#xff0c;具有基于bootstrap…

Vue3-小兔鲜项目

1.初始化项目 npm init vuelatest src目录调整 Git项目管理 基于create-vue创建出来的项目默认没有初始化git仓库&#xff0c;需要我们手动初始化 执行命令并完成首次提交 1.git init 2.git add 3.git commit -m "init" 别名路径联想提示 什么是别名路径联想…

通过requests库使用HTTP编写的爬虫程序

使用Python的requests库可以方便地编写HTTP爬虫程序。以下是一个使用requests库的示例&#xff1a; import requests# 发送HTTP GET请求 response requests.get("http://example.com")# 检查响应状态码 if response.status_code 200:# 获取响应内容html response.…

推荐5款助你高效工作的小软件

现在&#xff0c;有很多实用的工具和软件可以帮助我们更高效地完成各种任务。以下是5款值得推荐的工具软件&#xff0c;能够极大地提高我们的工作效率。 1.电子书阅读器——Koodo Reader ​ Koodo Reader 是一款开源免费的电子书阅读器&#xff0c;支持多达15种主流电子书格式…

laravel+vue2 element 一套项目级医院手术麻醉信息系统源码

手术麻醉临床信息系统源码&#xff0c;PHPmysqllaravelvue2 手术麻醉临床信息系统&#xff0c;采用计算机和通信技术&#xff0c;实现监护仪、麻醉机、输液泵等设备输出数据的自动采集&#xff0c;采集的数据能够如实准确地反映患者生命体征参数的变化&#xff0c;并实现信息高…

搜维尔科技:【应用】配备MTi-3的轻便型ROV,在水下进行地理标记视觉检测

部署潜水员进行水下摄像&#xff0c;不仅难度高而且费用昂贵&#xff0c;需要受过潜水和摄像两方面培训的专业人员来进行。但有些水下作业任务例如拍摄海底管道内部的照片&#xff0c;由于人员无法进入或危险度高的原因&#xff0c;无法由潜水员完成。 如今&#xff0c;俄罗…