个人封装的Java工具包

封装一些常用的功能(JDK至少需要1.8),持续更新

API文档

使用Maven

<dependency>
    <groupId>com.zhazhapan</groupId>
    <artifactId>util</artifactId>
    <version>1.0.6</version>
</dependency>

或手动导入: 点我下载

GitHub地址
Gitee地址

功能

1. JSON快速解析,基于fastjson

使用

// 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路径语法

2. 简单计算器

使用

// 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. 网络文件下载

使用

// 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. 简单的读写文件

使用

// 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. 简单的线程池

使用

// 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常用的加密(包括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)

使用

// 1. 导入
import com.zhazhapan.util.dialog.Alerts;

// 2. 弹窗并接收返回的信息
Optional<ButtonType> 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

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. 发送邮件

// 导包
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

// 一个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

BeanUtils.jsonPutIn(jsonObject, bean);

16. com.zhazhapan.util.NetUtils

方法名简要说明
getDataOfUrl获取URL对应的网页内容
getInputStreamOfUrl获取URL对应的InputStream对象
getInputStreamOfConnection获取HttpURLConnection对应的InputStream对象

17. com.zhazhapan.util.ReflectUtils

方法名简要说明
scanPackage扫描包下面所有的类
invokeMethod通过反射调用方法
getTypes获取对象集的所有类型
getBasicTypes获取所有对象的基本类型
invokeMethodUseBasicType使用基本类型调用方法

18. com.zhazhapan.util.HttpUtils

方法名简要说明
getCookie通过名称获取Cookie
此工具我不再更新,里面大多数方法我迁移到了hutool工具包中,而其中一些不常用的功能被遗弃,项目暂留做为以后参考。 common-tools 一、数据库工具类 1、com.baijob.commonTools.db.ds C3p0Ds 和 DruidDs分别是两种连接池的实现,依赖于数据库配置文件,配置文件的样例参考config/db-example.setting 使用时将db-example.setting复制于${classpath}/config/db.setting,按照配置文件中的说明替换相应值 如果使用Druid,则需参考druid-example.setting创建${classpath}/config/druid.setting文件,详情请参考官方文档 使用C3P0则需要参考c3p0-config-example.xml创建${classpath}/c3p0-config.xml来调节C3P0参数 此时即可调用C3p0Ds.getDataSource()或DruidDs.getDataSource()方法获得默认的数据源 如果要自定义数据库配置文件的参数,请调用相应的init(),传入相关参数 注:Setting对象请参考与之对应的章节 2、com.baijob.commonTools.db.DbUtil 数据库工具类,提供了关闭方法:关闭可以传入多个参数,关闭的顺序是按照参数的顺序来的,用于一次性关闭Connnection、Statement、ResultSet等 newSqlRunner方法用于快速新建一个SqlRunner(此类介绍参考下问) 3、com.baijob.commonTools.db.DsSetting,用于读取db.setting文件辅助类,内部使用 4、com.baijob.commonTools.db.SqlRunner类参考Apache的DbUtils工具包封装了常用的增删改查方法,与com.baijob.commonTools.db.RsHandler配合使用 com.baijob.commonTools.db.RsHandler接口与Apache的DbUtils的ResultSetHandler等价,抽象结果集处理。 二、邮件工具类 1、com.baijob.commonTools.mail.MailAccount 邮件账户类。 可以调用MailAccount(String accountSettingFileBaseClassLoader)读取相对路径的Setting文件,配置参考mailAccount-example.setting 2、com.baijob.commonTools.mail.MailUtil邮件发送工具类,方法请参考注释 此工具类依赖javax.mail,请参考pom.xml添加依赖或手动下载 三、网络相关工具类 1、com.baijob.commonTools.net.AccessControl访问控制,基于配置文件,可以设定IP白名单或黑名单,可以通过配置文件实现简单的账户验证。 配置文件请参考access-example.xml 2、com.baijob.commonTools.net.Connector 连接对象实体类,有host、端口、用户名、密码等属性 3、com.baijob.commonTools.net.HtmlUtil HTML工具类,暂时只提供特殊字符转义 4、com.baijob.commonTools.net.SocketUtil socket工具类。 isUsableLocalPort() 检测本地某个端口是否可用(可用是指没有被其他程序占用) isValidPort()是否是符合规范的端口号 longToIpv4()将long转换为ipv4地址,反方法是ipv4ToLong() netCat()简易的数据发送方法 5、com.baijob.commonTools.net.SSHUtil SSH相关工具类 getSession()获得一个SSH会话 bindPort()将远程主机的端口映射到本地某个端口 6、com.baijob.commonTools.net.URLUtil 将相对、绝对路径转换为URL对象,用于网络或文件流的读写,Setting的配置依赖此工具包 四、线程相关工具类 1、com.baijob.commonTools.thread.BaseRunnable 此类实现了Runnable接口,扩展了功能。 增加名称、ID,调用次数和时间统计、线程停止接口等,并且在线程运行时,不允许此线程第二次启动。 2、com.baijob.commonTools.thread.Executor 线程池工具类 调用静态方法execute()启动线程,此线程在公共的线程池中执行 若想自定义线程池大小或独立控制,可调用newExecutor()实例化一个线程池 excAsync()执行一个异步方法 3、com.baijob.commonTools.thread.SyncQueue 阻塞队列,简化了JDK的BlockingQueue
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值