# util **Repository Path**: code4everything/util ## Basic Information - **Project Name**: util - **Description**: 封装了一些Java常用的功能 - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: https://apidoc.gitee.com/code4everything/util/ - **GVP Project**: No ## Statistics - **Stars**: 11 - **Forks**: 5 - **Created**: 2017-11-21 - **Last Updated**: 2022-05-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 封装一些常用的功能(JDK至少需要1.8),持续更新 > [**API文档**](https://apidoc.gitee.com/code4everything/util/) **使用Maven** ``` xml com.zhazhapan util 1.1.2 ``` **或手动导入:** [点我下载](http://oq3iwfipo.bkt.clouddn.com/tools/zhazhapan/util-1.1.0.jar) > [**GitHub地址**](https://github.com/code4everything/util) > [**Gitee地址**](https://gitee.com/code4everything/util) ## 功能 **1. JSON快速解析,基于fastjson** *使用* ``` java // 1. 导包 import com.zhazhapan.config.JsonParser; String json = "{key1:test,key2:{child1:node1,child2:node2},key3:[{fast:json1},{fast:json2}],key4:[arr1,arr2]}"; // 2. 新建一个解析对象 // 2.1 使用json字符串 JsonParser jsonParser = new JsonParser(json, false); // 2.2 或使用文件路径(可能抛出IO异常) JsonParser jsonParser = new JsonParser("/Users/pantao/Desktop/test.json"); // 2.3 或使用URL对象 JsonParser jsonParser = new JsonParser(new URL("http://somehost.com/sometext.json")); // 3. 愉快的使用 String str = jsonParser.getString("key3[1].fast"); String str1 = jsonParser.getString("key4[1]"); JSONObject jsonObject = jsonParser.getObject("key3[0]"); JSONArray jsonArray = jsonParser.getArray("key4"); // 或使用JSONPath路径语法 Object object = jsonParser.eval("$.key2.child1"); // 4. 修改指定路径值 jsonParser.set("key1", "test_set_value"); // 5. 删除指定路径值 jsonParser.remove("key1"); // 6. 指定路径是否包含某个值 boolean b = jsonParser.containsValue("key1", "test"); // 7. 返回并格式化JSON jsonParser.toString(); ``` 备注:[fastjson jsonpath路径语法](https://github.com/alibaba/fastjson/wiki/JSONPath) **2. 简单计算器** *使用* ``` java // 1. 导包 import com.zhazhapan.util.Calculator; // 2. 设置(如果没有设置将使用默认的精度)计算精度(即保存多少位小数) Calculator.setPrecision(5); // 3. 计算(有可能抛出计算式不合法的异常) String formula = "(23-9*7)/22+2(35-45+56/(12-9+4*(22/10-2)))"; BigDecimal bd = Calculator.calculate(formula); double res = db.doubleValue(); ``` **3. 网络文件下载** *使用* ``` java // 1. 导包 import com.zhazhapan.util.Downloader; // 2. 下载 String storagePath = "/Users/pantao/Desktop"; Downloader.download(storagePath, "http://oq3iwfipo.bkt.clouddn.com/tools/zhazhapan/util.jar"); ``` **4. 简单的读写文件** *使用* ``` java // 1. 导包 import com.zhazhapan.util.FileExecutor; // 2. 写文件(可能抛出IO异常) String write = "write something"; FileExecutor.saveFile("/Users/pantao/Desktop/test.txt", write, false); // 3. 读文件(可能抛出IO异常) String read = FileExecutor.readFile("/Users/pantao/Desktop/test.txt"); // 4. 批量复制文件夹 FileExecutor.copyDirectories(new String[] { "/Users/pantao/Desktop/test" }, "/Users/pantao/Desktop/new"); // 5. 批量复制文件 FileExecutor.copyFiles(new String[] { "/Users/pantao/Desktop/qiniu.jar" }, "/Users/pantao/Desktop/test"); // 6. 批量重命名文件 String[] files = new String[] { "/Users/pantao/Desktop/test/Dump20171220_3.sql", "/Users/pantao/Desktop/test/Dump20171220_4.sql" }; FileExecutor.renameFiles(files, new String[] { "test_rename_1", "test_rename_2.txt" }); // 7. 拆分文件,通过拆分点拆分 FileExecutor.splitFile("/Users/pantao/Desktop/test/Dump20171220.sql", new long[] { 1000, 2000, 3000 }); // 8. 合并文件 String[] files = new String[] { "/Users/pantao/Desktop/test/Dump20171220_1.sql", "/Users/pantao/Desktop/test/Dump20171220_2.sql" }; FileExecutor.mergeFiles(files, "/Users/pantao/Desktop/test/test_merge.sql", ""); // 9. 创建文件(如果存在则删除) FileExecutor.createNewFile("test.txt"); // 10. 删除文件或文件夹(递归删除) FileExecutor.deleteFile("/Users/pantao/Desktop/test/test_merge.sql"); // 11. 扫描文件夹下面所有的文件(返回一个文件列表) FileExecutor.scanFolder("/Users/Pantao/Desktop"); // 12. 创建文件,如果文件不存在的话 FileExecutor.createFile("test.txt"); ``` **5. 简单的线程池** *使用* ``` java // 1. 导包 import com.zhazhapan.util.ThreadPool; // 2. 初始化线程池 // 2.1 方式一 ThreadPool.setCorePoolSize(1); ThreadPool.setMaximumPoolSize(5); ThreadPool.setKeepAliveTime(100); ThreadPool.setTimeUnit(TimeUnit.MILLISECONDS); ThreadPool.init(); // 2.2 方式二 ThreadPool.init(1, 5, 100, TimeUnit.MILLISECONDS); // 3. 使用线程池 ThreadPool.executor.submit(() -> { //do somthing here }); // 4. 或者新建线程池 ThreadPool threadPool = new ThreadPool(1, 5, 100, TimeUnit.MILLISECONDS); // 4.1 使用新建的线程池 threadPool.newExecutor.submit(() -> { //do somthing here }); ``` **6. 简单的加密与解密** ``` java // 提供一些Java常用的加密(包括md5,base64,sha等加密) import com.zhazhapan.util.decryption.JavaEncrypt; // 如何使用 String code = JavaEncrypt.md5("this is a md5 encrypt method"); String sha256 = JavaEncrypt.sha256("123456"); // 主要是base64解密 import com.zhazhapan.util.decryption.JavaDecrypt; // 异或加密和ascii加密 import com.zhazhapan.util.decryption.SimpleEncryt; // 如何使用 String code = SimpleEncryt.ascii("simple encrypt", "key"); // 异或解密和ascii解密 import com.zhazhapan.util.decryption.SimpleDecrypt; ``` **7. 弹窗(使用JavaFX,JDK最低要求1.8)** *使用* ``` java // 1. 导入 import com.zhazhapan.util.dialog.Alerts; // 2. 弹窗并接收返回的信息 Optional result = Alerts.showConfirmation("title", "some information"); if (result.get() == ButtonType.OK) { // do something here } else { // do something here } // 3. 其他类型的弹窗基本上跟上面的操作一样 // 4. 弹出输入框 // 4.1 导包 import com.zhazhapan.util.dialog.Dialogs; // 4.2 弹出并接收返回的内容(如果用户点击取消将返回null) String msg = Dialogs.showInputDialog("title", "header", "content", "default value"); ``` **8. `com.zhazhapan.util.Checker`类** *所有参数均不用考虑为null的情况,Checker会处理* | 方法名 | 简要说明 | | ------------- | -------------------------------- | | isSorted | 检查数组是否是升序或降序 | | isDate | 是否是日期格式 | | replace | 替换字符串 | | isEmail | 是否是邮箱格式 | | isDecimal | 是否是数字(包括小数)格式 | | isNumber | 是否是整数 | | isNull | 对象是否为null | | isNotNull | 对象是否不为null | | isNullOrEmpty | 字符串是否为null或空 | | isNotEmpty | 是否不为null且不为空 | | checkNull | 检测字符串是否为null,如果是,返回空字符串,否则返回原字符串 | | isEmpty | 列表或集合是否为空 | | isHyperLink | 是否是超链接(URL) | | checkDate | 检测日期是否为null,如果是,返回当前日期,否则返回原日期 | |isWindows|判断当前系统是否是Windows| |isMacOS|判断当前系统是否是Mac| |isLinux|判断当前系统是否是Linux| |isLimited|判断字符串的长度是否在某个范围| |isImage|判断文件是否是图片| **9. `com.zhazhapan.util.Formatter`类** | 方法名 | 简要说明 | | ---------------------- | ------------------------------------- | | stringToInt | 将字符串转换为Integer | | formatSize | 格式化文件大小为KB、MB、GB、TB格式 | | sizeToLong | 将格式化后的文件大小转换为单位为B(字节)的long型 | | stringToDouble | 字符串转换为Double | | stringToLong | 字符串转换为Long | | customFormatDecimal | 将Double转换为自定义格式的字符串 | | formatDecimal | 将Double转换为默认格式(#0.00)的字符串 | | timeStampToString | 将时间戳转换为“yyyy-MM-dd HH:mm:ss”格式的字符串 | | formatJson | 将json文本转换为标准格式的json | | dateToString | 将日期转换为“yyyy-MM-dd”格式的字符串 | | datetimeToString | 将日期转换为“yyyy-MM-dd HH:mm:ss”格式的字符串 | | getFileName | 从路径(包括网络路径)中获取文件名 | | stringToFloat | 将字符串转换为Float | | stringToInteger | 同stringToInt | | stringToDate | 将字符串转换为“yyyy-MM-dd”格式的日期 | | stringToLongTime | 将字符串转换为“HH:mm:ss”格式的日期 | | stringToShortTime | 将字符串转换为“HH:mm”格式的日期 | | stringToCustomDateTime | 将字符串转换为自定义格式的日期 | | stringToDatetime | 将字符串转换为“yyyy-MM-dd HH:mm:ss”格式的日期 | | toLocalDate | 将日期转换为“yyyy年MM月dd日”格式的字符串 | | longTimeToString | 将日期转换为“HH:mm:ss”格式的字符串 | | shortTimeToString | 将日期转换为“HH:mm”格式的字符串 | | datetimeToCustomString | 将日期转换为自定义格式的字符串 | | numberFormat | 将数字格式化为指定长度的字符串(不足用0补齐) | | localDateToDate | 将java.time.LocalDate转换为java.util.Date | | dateToLocalDate | 将java.util.Date转换为java.time.LocalDate | | listToJson | 将List转换为JSON | | mapToJson | 将Map转换为JSON | |getFileSuffix|获取文件后缀名| **10. `com.zhazhapan.util.Utils`类** | 方法名 | 简要说明 | | ----------------- | ----------------------- | | extractDouble | 从字符串中提取数字并转换为Double | | extractFloat | 从字符串中提取数字并转换为Float | | extractShort | 从字符串中提取数字并转换为Short | | extractLong | 从字符串中提取数字并转换为Long | | extractInt | 从字符串中提取数字并转换为Integer | | extractDigit | 从字符串中提取出数字,包括最后一个“.”号 | | maxLengthString | 返回多个字符串中长度最长的字符串 | | copyToClipboard | 复制字符串至系统剪贴板 | | openLink | 使用系统默认的浏览器打开超链接 | | openFile | 使用系统默认的方式打开文件 | | getMaxValue | 从多个数字中获取最大值 | |getCurrentOS()|获取当前系统名称| **11. `com.zhazhapan.util.ArrayUtils`类** |方法名|简要说明| |------|---------------| |heapSort|堆排序| |mergeSort|归并排序| |shellSort|希尔排序| |selectSort|选择排序| |quickSort|快速排序| |insertSort|插入排序| |bubbleSort|冒泡排序| |unique|数组去重| | concatArrays | 合并多个数组 | | mergeSortedArrays | 将两个已经排好序(同序)的数组合并一个有序数组 | **12. `com.zhazhapan.util.DateUtils`类** |方法名|简要说明| |------|---------------| |getWeekAsChinese|获取某个日期的星期,返回一个中文字符串| |getWeek|获取某个日期的星期,返回一个整型| |addHour|某个日期后推多少个小时| |addMinute|某个日期后推多少个分钟| |addSecond|某个日期后推多少个秒| |addYear|某个日期后推多少个年| |addMonth|某个日期后推多少个月| |addDay|某个日期后推多少个天| | getCurrentMonth() | 获取当前月份 | | getDay | 获取日期 | | getMonth | 获取月份 | | getYear | 获取年份 | **13. 发送邮件** ``` java // 导包 import com.zhazhapan.util.MailSender; // 如何使用,下面的key指的是开启了POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务,生成的授权码 MailSender.config("smtp.qq.com", "zhazhapan", "735817834@qq.com", "key"); MailSender.sendMail("tao@zhazhapan.com", "title", "this is a test email"); ``` **14. `com.zhazhapan.util.RandomUtils`类** |方法名|简要说明| |------|---------------| |getRandomDouble|获取一个随机的双精度类型| |getRandomInteger|获取一个随机的整型| |getRandomIntegerIgnoreRange|获取一个可以忽略某个区间的随机整型| |getRandomColor|获取一个随机的颜色| |getRandomEmail|获取一个随机邮箱| |getRandomString|获取一个随机字符串| |getRandomStringWithoutSymbol|获取一个只有数字和字母的随机字符串| |getRandomStringOnlyLetter|获取一个只有字母的随机字符串| |getRandomStringOnlyLowerCase|获取一个只有小写字母的随机字符串| |getRandomStringOnlyUpperCase|获取一个只有大写字母的随机字符串| |getRandomTextIgnoreRange|获取一个可以忽略某个范围字符的随机字符串| |getRandomText|获取一个字符串| **15. JSON与Bean互相转换** *Bean转JSON* ``` java // 一个Bean类 // 也可以不用注解 @ToJsonString(type = JsonType.PRETTY, modifier = FieldModifier.PRIVATE, method = JsonMethod.HANDLE) public class User { public int id; private String name; private Date birth; public User() {} public User(int id, String name, Date birth) { this.id = id; this.name = name; this.birth = birth; } @Override public String toString() { try { // 1. 不使用注解 return BeanUtils.toJsonString(this); // 2. 使用注解 return BeanUtils.toJsonStringByAnnotation(this); } catch (IllegalAccessException e) { return e.getMessage(); } } } // 外部类调用 User user = new User(1, "test", new Date()); System.out.println(user.toString()); // 不使用注解的输出 {"name":"test","birth":1516429105846,"id":1} // 使用注解的输出 { "name": "test", "birth": "Sat Jan 20 14:18:25 CST 2018" } ``` *JSON转Bean* ``` java BeanUtils.jsonPutIn(jsonObject, bean); ``` **16. `com.zhazhapan.util.NetUtils`类** |方法名|简要说明| |------|---------------| |getDataOfUrl|获取URL对应的网页内容| |getInputStreamOfUrl|获取URL对应的InputStream对象| |getInputStreamOfConnection|获取HttpURLConnection对应的InputStream对象| |evaluate|XPath解析HTML内容| |getHtmlFromUrl|获取网页内容| |getDocumentFromUrl|获取HTML文档| |getComputerName|获取计算机名| |getSystemName|获取系统名称| |getSystemArch|获取系统架构| |getSystemVersion|获取系统版本| |getMacAddress|获取Mac地址| |getPublicIpAndLocation|获取公网IP和归属地| |getLocalIp|获取本地ip地址| |getLocationByIp|获取ip归属地| **17. `com.zhazhapan.util.ReflectUtils`类** |方法名|简要说明| |------|---------------| |scanPackage|扫描包下面所有的类| |invokeMethod|通过反射调用方法| |getTypes|获取对象集的所有类型| |getBasicTypes|获取所有对象的基本类型| |invokeMethodUseBasicType|使用基本类型调用方法| **18. `com.zhazhapan.util.HttpUtils`类** |方法名|简要说明| |------|---------------| |getCookie|通过名称获取Cookie|