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
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
|
package net.geedge.util;
import java.awt.Graphics;
import java.awt.Robot;
import java.lang.ref.PhantomReference;
import java.lang.ref.Reference;
import java.lang.ref.ReferenceQueue;
import java.lang.ref.SoftReference;
import java.lang.ref.WeakReference;
import java.lang.reflect.Type;
import java.math.BigDecimal;
import java.net.Socket;
import java.nio.ByteBuffer;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.time.LocalDateTime;
import java.time.temporal.Temporal;
import java.time.temporal.TemporalAccessor;
import java.util.Calendar;
import java.util.Collection;
import java.util.Iterator;
import java.util.Spliterator;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import javax.tools.JavaCompiler;
import javax.tools.JavaFileObject;
import cn.hutool.core.date.DateTime;
public class T {
public static final Pattern REGEX_SPECIAL_DATE = Pattern
.compile("(\\d{4}-\\d{1,2}-\\d{1,2}[T]\\d{1,2}:\\d{1,2}:\\d{1,2})(.\\d{1,10})((\\+\\d{1,2}:\\d{1,2})|(Z))");
/**
* 数据库操作工具类
*/
public final static cn.hutool.db.DbUtil DbUtil = new cn.hutool.db.DbUtil();
/**
* 安全相关工具类<br>
* 加密分为三种:<br>
* 1、对称加密(symmetric),例如:AES、DES等<br>
* 2、非对称加密(asymmetric),例如:RSA、DSA等<br>
* 3、摘要加密(digest),例如:MD5、SHA-1、SHA-256、HMAC等<br>
*/
public final static cn.hutool.crypto.SecureUtil SecureUtil = new cn.hutool.crypto.SecureUtil();
/**
* 代理工具类
*/
public final static cn.hutool.aop.ProxyUtil ProxyUtil = new cn.hutool.aop.ProxyUtil();
/**
* 敏感词工具类
*/
public final static cn.hutool.dfa.SensitiveUtil SensitiveUtil = new cn.hutool.dfa.SensitiveUtil();
/**
* json 工具类
*/
public static class JSONUtil extends cn.hutool.json.JSONUtil {
}
/**
* 数据库元数据信息工具类
*
* <p>
* 需要注意的是,此工具类在某些数据库(比如Oracle)下无效,此时需要手动在数据库配置中增加:
*
* <pre>
* remarks = true
* useInformationSchema = true
* </pre>
*
* @author looly
*/
public static class MetaUtil extends cn.hutool.db.meta.MetaUtil {
}
/**
* 异常工具类
*
* @author Looly
*/
public static class ExceptionUtil extends cn.hutool.core.exceptions.ExceptionUtil {
}
/**
* 正则相关工具类<br>
* 常用正则请见 {@link cn.hutool.core.lang.Validator}
*
* @author xiaoleilu
*/
public static class ReUtil extends cn.hutool.core.util.ReUtil {
}
/**
* SOAP相关工具类
*
* @author looly
* @since 4.5.7
*/
public static class SoapUtil extends cn.hutool.http.webservice.SoapUtil {
}
/**
* 脚本工具类
*
* @author Looly
*/
public static class ScriptUtil extends cn.hutool.script.ScriptUtil {
}
/**
* 提供Unicode字符串和普通字符串之间的转换
*
* @author 兜兜毛毛, looly
* @since 4.0.0
*/
public static class UnicodeUtil extends cn.hutool.core.text.UnicodeUtil {
}
/**
* 时间工具类
*
* @author xiaoleilu
*/
public static class DateUtil extends cn.hutool.core.date.DateUtil {
/**
* 为了处理 2021-05-21T12:06:29.272986526+08:00 格式时间
*
* @param utcString
* @return
*/
public static DateTime parseUTC(String utcString) {
if (StrUtil.isBlank(utcString)) {
return null;
}
if (utcString.length() > 29) {
Matcher matcher = REGEX_SPECIAL_DATE.matcher(utcString);
if (matcher.matches()) {
utcString = T.StrUtil.concat(true, matcher.group(1), matcher.group(3));
}
}
return cn.hutool.core.date.DateUtil.parseUTC(utcString);
}
}
/**
* EC密钥参数相关工具类封装
*
* @author looly
* @since 5.4.3
*/
public static class ECKeyUtil extends cn.hutool.crypto.ECKeyUtil {
}
/**
* 枚举工具类
*
* @author looly
* @since 3.3.0
*/
public static class EnumUtil extends cn.hutool.core.util.EnumUtil {
}
/**
* 数学相关方法工具类<br>
* 此工具类与{@link cn.hutool.core.util.NumberUtil}属于一类工具,NumberUtil偏向于简单数学计算的封装,MathUtil偏向复杂数学计算
*
* @author looly
* @since 4.0.7
*/
public static class MathUtil extends cn.hutool.core.math.MathUtil {
}
/**
* Sax方式读取Excel相关工具类
*
* @author looly
*/
public static class ExcelSaxUtil extends cn.hutool.poi.excel.sax.ExcelSaxUtil {
}
/**
* 数字工具类<br>
* 对于精确值计算应该使用 {@link BigDecimal}<br>
* JDK7中<strong>BigDecimal(double val)</strong>构造方法的结果有一定的不可预知性,例如:
*
* <pre>
* new BigDecimal(0.1)
* </pre>
* <p>
* 表示的不是<strong>0.1</strong>而是<strong>0.1000000000000000055511151231257827021181583404541015625</strong>
*
* <p>
* 这是因为0.1无法准确的表示为double。因此应该使用<strong>new BigDecimal(String)</strong>。
* </p>
* 相关介绍:
* <ul>
* <li>http://www.oschina.net/code/snippet_563112_25237</li>
* <li>https://github.com/venusdrogon/feilong-core/wiki/one-jdk7-bug-thinking</li>
* </ul>
*
* @author Looly
*/
public static class NumberUtil extends cn.hutool.core.util.NumberUtil {
}
/**
* Jsch工具类<br>
* Jsch是Java Secure Channel的缩写。JSch是一个SSH2的纯Java实现。<br>
* 它允许你连接到一个SSH服务器,并且可以使用端口转发,X11转发,文件传输等。<br>
*
* @author Looly
* @since 4.0.0
*/
public static class JschUtil extends cn.hutool.extra.ssh.JschUtil {
}
/**
* 线程池工具
*
* @author luxiaolei
*/
public static class ThreadUtil extends cn.hutool.core.thread.ThreadUtil {
}
/**
* Oshi库封装的工具类,通过此工具类,可获取系统、硬件相关信息
*
* <pre>
* 1、系统信息
* 2、硬件信息
* </pre>
*
* 相关内容见:https://github.com/oshi/oshi
*
* @author Looly
* @since 4.6.4
*/
public static class OshiUtil extends cn.hutool.system.oshi.OshiUtil {
}
/**
* URL(Uniform Resource Locator)统一资源定位符相关工具类
*
* <p>
* 统一资源定位符,描述了一台特定服务器上某资源的特定位置。
* </p>
* URL组成:
*
* <pre>
* 协议://主机名[:端口]/ 路径/[:参数] [?查询]#Fragment
* protocol :// hostname[:port] / path / [:parameters][?query]#fragment
* </pre>
*
* @author xiaoleilu
*/
public static class URLUtil extends cn.hutool.core.util.URLUtil {
}
/**
* ID生成器工具类,此工具类中主要封装:
*
* <pre>
* 1. 唯一性ID生成器:UUID、ObjectId(MongoDB)、Snowflake
* </pre>
*
* <p>
* ID相关文章见:http://calvin1978.blogcn.com/articles/uuid.html
*
* @author looly
* @since 4.1.13
*/
public static class IdUtil extends cn.hutool.core.util.IdUtil {
}
/**
* Http请求工具类
*
* @author xiaoleilu
*/
public static class HttpUtil extends cn.hutool.http.HttpUtil {
}
/**
* 桌面相关工具(平台相关)<br>
* Desktop 类允许 Java 应用程序启动已在本机桌面上注册的关联应用程序,以处理 URI 或文件。
*
* @author looly
* @since 4.5.7
*/
public static class DesktopUtil extends cn.hutool.core.swing.DesktopUtil {
}
/**
* 图片处理工具类:<br>
* 功能:缩放图像、切割图像、旋转、图像类型转换、彩色转黑白、文字水印、图片水印等 <br>
* 参考:http://blog.csdn.net/zhangzhikaixinya/article/details/8459400
*
* @author Looly
*/
public static class ImgUtil extends cn.hutool.core.img.ImgUtil {
}
/**
* HTML工具类
*
* <p>
* 比如我们在使用爬虫爬取HTML页面后,需要对返回页面的HTML内容做一定处理,<br>
* 比如去掉指定标签(例如广告栏等)、去除JS、去掉样式等等,这些操作都可以使用此工具类完成。
*
* @author xiaoleilu
*
*/
public static class HtmlUtil extends cn.hutool.http.HtmlUtil {
}
/**
* PEM(Privacy Enhanced Mail)格式相关工具类。(基于Bouncy Castle)
*
* <p>
* PEM一般为文本格式,以 -----BEGIN... 开头,以 -----END... 结尾,中间的内容是 BASE64 编码。
* <p>
* 这种格式可以保存证书和私钥,有时我们也把PEM格式的私钥的后缀改为 .key 以区别证书与私钥。
*
* @author looly
* @since 5.1.6
*/
public static class PemUtil extends cn.hutool.crypto.PemUtil {
}
/**
* 分词工具类
*
* @author looly
* @since 4.3.3
*/
public static class TokenizerUtil extends cn.hutool.extra.tokenizer.TokenizerUtil {
}
/**
* ExcelExtractor工具封装
*
* @author looly
* @since 5.4.4
*/
public static class ExcelExtractorUtil extends cn.hutool.poi.excel.ExcelExtractorUtil {
}
/**
* 邮件工具类,基于javax.mail封装
*
* @author looly
* @since 3.1.2
*/
public static class MailUtil extends cn.hutool.extra.mail.MailUtil {
}
/**
* NIO中Path对象操作封装
*
* @author looly
* @since 5.4.1
*/
public static class PathUtil extends cn.hutool.core.io.file.PathUtil {
}
/**
* 邮件内部工具类
*
* @author looly
* @since 3.2.3
*/
public static class InternalMailUtil extends cn.hutool.extra.mail.InternalMailUtil {
}
/**
* 定时任务工具类<br>
* 此工具持有一个全局{@link cn.hutool.cron.Scheduler},所有定时任务在同一个调度器中执行<br>
* {@link #setMatchSecond(boolean)}
* 方法用于定义是否使用秒匹配模式,如果为true,则定时任务表达式中的第一位为秒,否则为分,默认是分
*
* @author xiaoleilu
*
*/
public static class CronUtil extends cn.hutool.cron.CronUtil {
}
/**
* Java的System类封装工具类。<br>
* 参考:http://blog.csdn.net/zhongweijian/article/details/7619383
*
* @author Looly
*/
public static class SystemUtil extends cn.hutool.system.SystemUtil {
}
/**
* 压缩工具类<br>
* 基于commons-compress的压缩解压封装
*
* @author looly
* @since 5.5.0
*/
public static class CompressUtil extends cn.hutool.extra.compress.CompressUtil {
}
/**
* {@link ClassLoader}工具类
*
* @author Looly
* @since 3.0.9
*/
public static class ClassLoaderUtil extends cn.hutool.core.util.ClassLoaderUtil {
}
/**
* {@link Spliterator}相关工具类
*
* @author looly
* @since 5.4.3
*/
public static class SpliteratorUtil extends cn.hutool.core.collection.SpliteratorUtil {
}
/**
* 监听工具类<br>
* 主要负责文件监听器的快捷创建
*
* @author Looly
* @since 3.1.0
*/
public static class WatchUtil extends cn.hutool.core.io.watch.WatchUtil {
}
/**
* Excel样式工具类
*
* @author looly
* @since 4.0.0
*/
public static class StyleUtil extends cn.hutool.poi.excel.style.StyleUtil {
}
/**
* 系统剪贴板工具类
*
* @author looly
* @since 3.2.0
*/
public static class ClipboardUtil extends cn.hutool.core.swing.clipboard.ClipboardUtil {
}
/**
* 文件类型判断工具类
*
* <p>
* 此工具根据文件的前几位bytes猜测文件类型,对于文本、zip判断不准确,对于视频、图片类型判断准确
* </p>
*
* <p>
* 需要注意的是,xlsx、docx等Office2007格式,全部识别为zip,因为新版采用了OpenXML格式,这些格式本质上是XML文件打包为zip
* </p>
*
* @author Looly
*/
public static class FileTypeUtil extends cn.hutool.core.io.FileTypeUtil {
}
/**
* 引用工具类,主要针对{@link Reference} 工具化封装<br>
* 主要封装包括:
*
* <pre>
* 1. {@link SoftReference} 软引用,在GC报告内存不足时会被GC回收
* 2. {@link WeakReference} 弱引用,在GC时发现弱引用会回收其对象
* 3. {@link PhantomReference} 虚引用,在GC时发现虚引用对象,会将{@link PhantomReference}插入{@link ReferenceQueue}。 此时对象未被真正回收,要等到{@link ReferenceQueue}被真正处理后才会被回收。
* </pre>
*
* @author looly
* @since 3.1.2
*/
public static class ReferenceUtil extends cn.hutool.core.util.ReferenceUtil {
}
/**
* 布隆过滤器工具
*
* @author looly
* @since 4.1.5
*/
public static class BloomFilterUtil extends cn.hutool.bloomfilter.BloomFilterUtil {
}
/**
* 修饰符工具类
*
* @author looly
* @since 4.0.5
*/
public static class ModifierUtil extends cn.hutool.core.util.ModifierUtil {
}
/**
* 集合的stream操作封装
*
* @author [email protected]
* @since 5.5.2
*/
public static class CollStreamUtil extends cn.hutool.core.collection.CollStreamUtil {
}
/**
* 摘要算法工具类
*
* @author Looly
*/
public static class DigestUtil extends cn.hutool.crypto.digest.DigestUtil {
}
/**
* 对象工具类,包括判空、克隆、序列化等操作
*
* @author Looly
*/
public static class ObjectUtil extends cn.hutool.core.util.ObjectUtil {
}
/**
* Hash算法大全<br>
* 推荐使用FNV1算法
*
* @author Goodzzp, Looly
*/
public static class HashUtil extends cn.hutool.core.util.HashUtil {
}
/**
* Bouncy Castle相关工具类封装
*
* @author looly
* @since 4.5.0
*/
public static class BCUtil extends cn.hutool.crypto.BCUtil {
}
/**
* 针对 {@link Type} 的工具类封装<br>
* 最主要功能包括:
*
* <pre>
* 1. 获取方法的参数和返回值类型(包括Type和Class)
* 2. 获取泛型参数类型(包括对象的泛型参数或集合元素的泛型类型)
* </pre>
*
* @author Looly
* @since 3.0.8
*/
public static class TypeUtil extends cn.hutool.core.util.TypeUtil {
}
/**
* Excel文件工具类
*
* @author looly
* @since 4.2.1
*/
public static class ExcelFileUtil extends cn.hutool.poi.excel.ExcelFileUtil {
}
/**
* NIO工具类
*
* @since 5.4.0
*/
public static class NioUtil extends cn.hutool.socket.nio.NioUtil {
}
/**
* 类工具类 <br>
*
* @author xiaoleilu
*/
public static class ClassUtil extends cn.hutool.core.util.ClassUtil {
}
/**
* 针对{@link Calendar} 对象封装工具类
*
* @author looly
* @since 5.3.0
*/
public static class CalendarUtil extends cn.hutool.core.date.CalendarUtil {
}
/**
* 网络相关工具
*
*/
public static class NetUtil extends cn.hutool.core.net.NetUtil {
public static String getLocalIPBySocket(String host, Integer port) {
Socket socket = null;
try {
socket = new Socket(host, port);
return socket.getLocalAddress().getHostAddress();
} catch (Exception e) {
return T.NetUtil.getLocalhostStr();
} finally {
T.IoUtil.close(socket);
}
}
}
/**
* 源码编译工具类,主要封装{@link JavaCompiler} 相关功能
*
* @author looly
* @since 5.5.2
*/
public static class CompilerUtil extends cn.hutool.core.compiler.CompilerUtil {
}
/**
* 锁相关工具
*
* @author looly
* @since 5.2.5
*/
public static class LockUtil extends cn.hutool.core.thread.lock.LockUtil {
}
/**
* 文件名相关工具类
*
* @author looly
* @since 5.4.1
*/
public static class FileNameUtil extends cn.hutool.core.io.file.FileNameUtil {
}
/**
* SM国密算法工具类<br>
* 此工具类依赖org.bouncycastle:bcpkix-jdk15on
*
* @author looly
* @since 4.3.2
*/
public static class SmUtil extends cn.hutool.crypto.SmUtil {
}
/**
* Props工具类<br>
* 提供静态方法获取配置文件
*
* @author looly
* @since 5.1.3
*/
public static class PropsUtil extends cn.hutool.setting.dialect.PropsUtil {
}
/**
* XML工具类<br>
* 此工具使用w3c dom工具,不需要依赖第三方包。<br>
* 工具类封装了XML文档的创建、读取、写出和部分XML操作
*
* @author xiaoleilu
*/
public static class XmlUtil extends cn.hutool.core.util.XmlUtil {
}
/**
* Velocity模板引擎工具类<br>
* 使用前必须初始化工具类
*
* @author xiaoleilu
* @deprecated 使用TemplateUtil替代
*/
public static class VelocityEngine extends cn.hutool.extra.template.engine.velocity.VelocityEngine {
}
/**
* {@link ByteBuffer} 工具类<br>
* 此工具来自于 t-io 项目以及其它项目的相关部分收集<br>
* ByteBuffer的相关介绍见:https://www.cnblogs.com/ruber/p/6857159.html
*
* @author tanyaowu, looly
* @since 4.0.0
*
*/
public static class BufferUtil extends cn.hutool.core.io.BufferUtil {
}
/**
* 表达式引擎工具类
*
* @author looly
* @since 5.5.0
*/
public static class ExpressionUtil extends cn.hutool.extra.expression.ExpressionUtil {
}
/**
* 驱动相关工具类,包括自动获取驱动类名
*
* @author looly
* @since 4.0.10
*/
public static class DriverUtil extends cn.hutool.db.dialect.DriverUtil {
}
/**
* IO工具类<br>
* IO工具类只是辅助流的读写,并不负责关闭流。原因是流可能被多次读写,读写关闭后容易造成问题。
*
* @author xiaoleilu
*/
public static class IoUtil extends cn.hutool.core.io.IoUtil {
}
/**
* JDK8+中的{@link LocalDateTime} 工具类封装
*
* @author looly
* @since 5.3.9
*/
public static class LocalDateTimeUtil extends cn.hutool.core.date.LocalDateTimeUtil {
}
/**
* 规范化对象生成工具
*
* @author looly
* @since 5.4.3
*/
public static class InternUtil extends cn.hutool.core.lang.intern.InternUtil {
}
/**
* 压缩工具类
*
* @author Looly
*/
public static class ZipUtil extends cn.hutool.core.util.ZipUtil {
}
/**
* 十六进制(简写为hex或下标16)在数学中是一种逢16进1的进位制,一般用数字0到9和字母A到F表示(其中:A~F即10~15)。<br>
* 例如十进制数57,在二进制写作111001,在16进制写作39。<br>
* 像java,c这样的语言为了区分十六进制和十进制数值,会在十六进制数的前面加上 0x,比如0x20是十进制的32,而不是十进制的20<br>
* <p>
* 参考:https://my.oschina.net/xinxingegeya/blog/287476
*
* @author Looly
*/
public static class HexUtil extends cn.hutool.core.util.HexUtil {
}
/**
* 数据大小工具类
*
* @author looly
* @since 5.3.10
*/
public static class DataSizeUtil extends cn.hutool.core.io.unit.DataSizeUtil {
}
/**
* User-Agent工具类
*
* @author looly
*
*/
public static class UserAgentUtil extends cn.hutool.http.useragent.UserAgentUtil {
}
/**
* 统一社会信用代码工具类
*
* <pre>
* 第一部分:登记管理部门代码1位 (数字或大写英文字母)
* 第二部分:机构类别代码1位 (数字或大写英文字母)
* 第三部分:登记管理机关行政区划码6位 (数字)
* 第四部分:主体标识码(组织机构代码)9位 (数字或大写英文字母)
* 第五部分:校验码1位 (数字或大写英文字母)
* </pre>
*
* @author looly
* @since 5.2.4
*/
public static class CreditCodeUtil extends cn.hutool.core.util.CreditCodeUtil {
}
/**
* {@link Temporal} 工具类封装
*
* @author looly
* @since 5.4.5
*/
public static class TemporalUtil extends cn.hutool.core.date.TemporalUtil {
}
/**
* Setting工具类<br>
* 提供静态方法获取配置文件
*
* @author looly
*/
public static class SettingUtil extends cn.hutool.setting.SettingUtil {
}
/**
* Statement和PreparedStatement工具类
*
* @author looly
* @since 4.0.10
*/
public static class StatementUtil extends cn.hutool.db.StatementUtil {
}
/**
* 基于https://github.com/vdurmont/emoji-java的Emoji表情工具类
* <p>
* emoji-java文档以及别名列表见:https://github.com/vdurmont/emoji-java
*
* @author looly
* @since 4.2.1
*/
public static class EmojiUtil extends cn.hutool.extra.emoji.EmojiUtil {
}
/**
* Bean工具类
*
* <p>
* 把一个拥有对属性进行set和get方法的类,我们就可以称之为JavaBean。
* </p>
*
* @author Looly
* @since 3.1.2
*/
public static class BeanUtil extends cn.hutool.core.bean.BeanUtil {
}
/**
* Servlet相关工具类封装
*
* @author looly
* @since 3.2.0
*/
public static class ServletUtil extends cn.hutool.extra.servlet.ServletUtil {
}
/**
* java bean 校验工具类,此工具类基于validation-api(jakarta.validation-api)封装
*
* <p>
* 在实际使用中,用户需引入validation-api的实现,如:hibernate-validator
* </p>
* <p>
* 注意:hibernate-validator还依赖了javax.el,需自行引入。
* </p>
*
* @author chengqiang
* @since 5.5.0
*/
public static class ValidationUtil extends cn.hutool.extra.validation.ValidationUtil {
}
/**
* Excel工作簿相关工具类
*
* @author looly
* @since 4.0.7
*
*/
public static class WorkbookUtil extends cn.hutool.poi.excel.WorkbookUtil {
}
/**
* 拼音工具类,封装了TinyPinyin、JPinyin、Pinyin4j,通过SPI自动识别。
*
* @author looly
*/
public static class PinyinUtil extends cn.hutool.extra.pinyin.PinyinUtil {
}
/**
* 调用者。可以通过此类的方法获取调用者、多级调用者以及判断是否被调用
*
* @author Looly
* @since 4.1.6
*/
public static class CallerUtil extends cn.hutool.core.lang.caller.CallerUtil {
}
/**
* 定时任务表达式工具类
*
* @author looly
*
*/
public static class CronPatternUtil extends cn.hutool.cron.pattern.CronPatternUtil {
}
/**
* 系统运行时工具类,用于执行系统命令的工具
*
* @author Looly
* @since 3.1.1
*/
public static class RuntimeUtil extends cn.hutool.core.util.RuntimeUtil {
}
/**
* {@link TemporalAccessor} 工具类封装
*
* @author looly
* @since 5.3.9
*/
public static class TemporalAccessorUtil extends cn.hutool.core.date.TemporalAccessorUtil {
}
/**
* 图形验证码工具
*
* @author looly
* @since 3.1.2
*/
public static class CaptchaUtil extends cn.hutool.captcha.CaptchaUtil {
}
/**
* 反射工具类
*
* @author Looly
* @since 3.0.9
*/
public static class ReflectUtil extends cn.hutool.core.util.ReflectUtil {
}
/**
* IPV4地址工具类
*
* <p>
* pr自:https://gitee.com/loolly/hutool/pulls/161
* </p>
*
* @author ZhuKun
* @since 5.4.1
*/
public static class Ipv4Util extends cn.hutool.core.net.Ipv4Util {
}
/**
* {@link Robot} 封装工具类,提供截屏等工具
*
* @author looly
* @since 4.1.14
*/
public static class RobotUtil extends cn.hutool.core.swing.RobotUtil {
}
/**
* {@link Graphics}相关工具类
*
* @author looly
* @since 4.5.2
*/
public static class GraphicsUtil extends cn.hutool.core.img.GraphicsUtil {
}
/**
* Cglib工具类
*
* @author looly
* @since 5.4.1
*/
public static class CglibUtil extends cn.hutool.extra.cglib.CglibUtil {
}
/**
* 转义和反转义工具类Escape / Unescape<br>
* escape采用ISO Latin字符集对指定的字符串进行编码。<br>
* 所有的空格符、标点符号、特殊字符以及其他非ASCII字符都将被转化成%xx格式的字符编码(xx等于该字符在字符集表里面的编码的16进制数字)。
*
* @author xiaoleilu
*/
public static class EscapeUtil extends cn.hutool.core.util.EscapeUtil {
}
/**
* 诊断工具类
*
* @author looly
* @since 5.5.2
*/
public static class DiagnosticUtil extends cn.hutool.core.compiler.DiagnosticUtil {
}
/**
* Excel中的行封装工具类
*
* @author looly
* @since 4.0.7
*/
public static class RowUtil extends cn.hutool.poi.excel.RowUtil {
}
/**
* 密钥工具类
*
* <p>
* 包括:
*
* <pre>
* 1、生成密钥(单密钥、密钥对)
* 2、读取密钥文件
* </pre>
*
* @author looly, Gsealy
* @since 4.4.1
*/
public static class KeyUtil extends cn.hutool.crypto.KeyUtil {
}
/**
* 基于Zxing的二维码工具类
*
* @author looly
* @since 4.0.2
*/
public static class QrCodeUtil extends cn.hutool.extra.qrcode.QrCodeUtil {
}
/**
* SQL相关工具类,包括相关SQL语句拼接等
*
* @author looly
* @since 4.0.10
*/
public static class SqlUtil extends cn.hutool.db.sql.SqlUtil {
}
/**
* Excel工具类,不建议直接使用index直接操作sheet,在wps/excel中sheet显示顺序与index无关,还有隐藏sheet
*
* @author Looly
*
*/
public static class ExcelUtil extends cn.hutool.poi.excel.ExcelUtil {
}
/**
* 缓存工具类
*
* @author Looly
* @since 3.0.1
*/
public static class CacheUtil extends cn.hutool.cache.CacheUtil {
}
/**
* Word工具类
*
* @author Looly
* @since 4.5.16
*/
public static class WordUtil extends cn.hutool.poi.word.WordUtil {
}
/**
* 注解工具类<br>
* 快速获取注解对象、注解值等工具封装
*
* @author looly
* @since 4.0.9
*/
public static class AnnotationUtil extends cn.hutool.core.annotation.AnnotationUtil {
}
/**
* Excel图片工具类
*
* @author looly
* @since 4.0.7
*/
public static class ExcelPicUtil extends cn.hutool.poi.excel.ExcelPicUtil {
}
/**
* 屏幕相关(当前显示设置)工具类
*
* @author looly
* @since 4.1.14
*/
public static class ScreenUtil extends cn.hutool.core.swing.ScreenUtil {
}
/**
* 文件工具类
*
* @author looly
*/
public static class FileUtil extends cn.hutool.core.io.FileUtil {
}
/**
* Word Document工具
*
* @author looly
* @since 4.4.1
*/
public static class DocUtil extends cn.hutool.poi.word.DocUtil {
}
/**
* 比较工具类
*
* @author looly
*/
public static class CompareUtil extends cn.hutool.core.comparator.CompareUtil {
}
/**
* Boolean类型相关工具类
*
* @author looly
* @since 4.1.16
*/
public static class BooleanUtil extends cn.hutool.core.util.BooleanUtil {
}
/**
* {@link Iterable} 和 {@link Iterator} 相关工具类
*
* @author Looly
* @since 3.1.0
*/
public static class IterUtil extends cn.hutool.core.collection.IterUtil {
}
/**
* 树工具类
*
* @author liangbaikai
*/
public static class TreeUtil extends cn.hutool.core.lang.tree.TreeUtil {
}
/**
* 身份证相关工具类<br>
* see https://www.oschina.net/code/snippet_1611_2881
*
* <p>
* 本工具并没有对行政区划代码做校验,如有需求,请参阅(2018年10月):
* http://www.mca.gov.cn/article/sj/xzqh/2018/201804-12/20181011221630.html
* </p>
*
* @author Looly
* @since 3.0.4
*/
public static class IdcardUtil extends cn.hutool.core.util.IdcardUtil {
}
/**
* 字符工具类<br>
* 部分工具来自于Apache Commons系列
*
* @author looly
* @since 4.0.1
*/
public static class CharUtil extends cn.hutool.core.util.CharUtil {
}
/**
* Socket相关工具类
*
* @author looly
* @since 4.5.0
*/
public static class SocketUtil extends cn.hutool.socket.SocketUtil {
}
/**
* 手机号工具类
*
* @author dahuoyzs
* @since 5.3.11
*/
public static class PhoneUtil extends cn.hutool.core.util.PhoneUtil {
}
/**
* 模板工具类
*
* @author looly
* @since 4.1.0
*/
public static class TemplateUtil extends cn.hutool.extra.template.TemplateUtil {
}
/**
* 集合相关工具类
* <p>
* 此工具方法针对{@link Collection}及其实现类封装的工具。
* <p>
* 由于{@link Collection} 实现了{@link Iterable}接口,因此部分工具此类不提供,而是在{@link IterUtil}
* 中提供
*
* @author xiaoleilu
* @see IterUtil
* @since 3.1.1
*/
public static class CollUtil extends cn.hutool.core.collection.CollUtil {
}
/**
* {@link JavaFileObject} 相关工具类封装
*
* @author lzpeng, looly
* @since 5.5.2
*/
public static class JavaFileObjectUtil extends cn.hutool.core.compiler.JavaFileObjectUtil {
}
/**
* 数组工具类
*
* @author Looly
*/
public static class ArrayUtil extends cn.hutool.core.util.ArrayUtil {
}
/**
* SSL(Secure Sockets Layer 安全套接字协议)相关工具封装
*
* @author looly
* @since 5.5.2
*/
public static class SSLUtil extends cn.hutool.core.net.SSLUtil {
}
/**
* 集合相关工具类,包括数组,是{@link CollUtil} 的别名工具类类
*
* @author xiaoleilu
* @see CollUtil
*/
public static class CollectionUtil extends cn.hutool.core.collection.CollectionUtil {
}
/**
* Excel表格中单元格工具类
*
* @author looly
* @since 4.0.7
*/
public static class CellUtil extends cn.hutool.poi.excel.cell.CellUtil {
}
/**
* 字符集工具类
*
* @author xiaoleilu
*/
public static class CharsetUtil extends cn.hutool.core.util.CharsetUtil {
}
/**
* 字符串工具类
*
* @author xiaoleilu
*/
public static class StrUtil extends cn.hutool.core.util.StrUtil {
/**
* 将下划线方式命名的字符串转换为驼峰式。如果转换前的下划线大写方式命名的字符串为空,则返回空字符串。<br>
* 例如:hello_world=》helloWorld
*
* @param name 转换前的下划线大写方式命名的字符串
* @param symbol 连接符
* @return 转换后的驼峰式命名的字符串
*/
public static String toCamelCase(CharSequence name, char symbol) {
if (null == name) {
return null;
}
String symbolStr = symbol + "";
String name2 = name.toString();
if (name2.contains(symbolStr)) {
final StringBuilder sb = new StringBuilder(name2.length());
boolean upperCase = false;
for (int i = 0; i < name2.length(); i++) {
char c = name2.charAt(i);
if (c == symbol) {
upperCase = true;
} else if (upperCase) {
sb.append(Character.toUpperCase(c));
upperCase = false;
} else {
sb.append(Character.toLowerCase(c));
}
}
return sb.toString();
} else {
return name2;
}
}
private static final String[] LIKE_SPECIAL_CHAR = { "%", "_" };
/**
* 转义 msyql like 特殊字符
*
* @param cs
* @return
*/
public static String likeEscape(String cs) {
if (StrUtil.isBlank(cs)) {
return null;
}
cs = StrUtil.replace(cs, "\\", "\\\\");
for (String s : LIKE_SPECIAL_CHAR) {
cs = StrUtil.replace(cs, s, "\\" + s);
}
return cs;
}
}
/**
* Map相关工具类
*
* @author Looly
* @since 3.1.1
*/
public static class MapUtil extends cn.hutool.core.map.MapUtil {
}
/**
* SPI机制中的服务加载工具类,流程如下
*
* <pre>
* 1、创建接口,并创建实现类
* 2、ClassPath/META-INF/services下创建与接口全限定类名相同的文件
* 3、文件内容填写实现类的全限定类名
* </pre>
*
* 相关介绍见:https://www.jianshu.com/p/3a3edbcd8f24
*
* @author looly
* @since 5.1.6
*/
public static class ServiceLoaderUtil extends cn.hutool.core.util.ServiceLoaderUtil {
}
/**
* 随机工具类
*
* @author xiaoleilu
*/
public static class RandomUtil extends cn.hutool.core.util.RandomUtil {
}
public static class ListUtil extends cn.hutool.core.collection.ListUtil {
}
/**
* Resource资源工具类
*
* @author Looly
*
*/
public static class ResourceUtil extends cn.hutool.core.io.resource.ResourceUtil {
}
/**
* AWT中字体相关工具类
*
* @author looly
* @since 5.3.6
*/
public static class FontUtil extends cn.hutool.core.img.FontUtil {
}
/**
* CSV工具
*
* @author looly
* @since 4.0.5
*/
public static class CsvUtil extends cn.hutool.core.text.csv.CsvUtil {
}
/**
* Word中表格相关工具
*
* @author Looly
* @since 4.5.14
*/
public static class TableUtil extends cn.hutool.poi.word.TableUtil {
}
/**
* 原始类型数组工具类
*
* @author looly
* @since 5.5.2
*/
public static class PrimitiveArrayUtil extends cn.hutool.core.util.PrimitiveArrayUtil {
}
public static class AesUtil {
private static final String KEY_ALGORITHM = "AES";
private static final String DEFAULT_CIPHER_ALGORITHM = "AES/ECB/PKCS5Padding";// 默认的加密算法
public static String encrypt(String content, byte[] key) {
try {
Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);// 创建密码器
byte[] byteContent = content.getBytes("utf-8");
cipher.init(Cipher.ENCRYPT_MODE, getSecretKey(key));// 初始化为加密模式的密码器
byte[] result = cipher.doFinal(byteContent);// 加密
return cn.hutool.core.util.HexUtil.encodeHexStr(result);
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
public static String decrypt(String content, byte[] key) {
try {
// 实例化
Cipher cipher = Cipher.getInstance(DEFAULT_CIPHER_ALGORITHM);
// 使用密钥初始化,设置为解密模式
cipher.init(Cipher.DECRYPT_MODE, getSecretKey(key));
// 执行操作
byte[] result = cipher.doFinal(cn.hutool.core.util.HexUtil.decodeHex(content));
String s = new String(result, "utf-8");
return s;
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
private static SecretKeySpec getSecretKey(byte[] key) {
// 返回生成指定算法密钥生成器的 KeyGenerator 对象
KeyGenerator kg = null;
try {
kg = KeyGenerator.getInstance(KEY_ALGORITHM);
SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
random.setSeed(key);
// AES 要求密钥长度为 128
kg.init(128, random);
// 生成一个密钥
SecretKey secretKey = kg.generateKey();
return new SecretKeySpec(secretKey.getEncoded(), KEY_ALGORITHM);// 转换为AES专用密钥
} catch (NoSuchAlgorithmException ex) {
ex.printStackTrace();
}
return null;
}
}
}
|