Skip to content

工具类使用指南

hely ho edited this page Jan 11, 2016 · 18 revisions

工具类使用指南

工具类的使用都比较简单,都是静态函数可以直接引用,所以具体类的说明不作过多说明,查看相应的文档。


##一、类说明

类路径 说明
org.voovan.tools.ByteBufferChannel ByteBuffer双向通道
org.voovan.tools.TDateTime 时间处理工具类
org.voovan.tools.TEnv JVM环境工具类
org.voovan.tools.TFile 文件操作工具类
org.voovan.tools.THash 加密、解密工具类
org.voovan.tools.TObject 对象工具类
org.voovan.tools.TPerformance 系统性能工具类
org.voovan.tools.TProperties 属性文件操作工具类
org.voovan.tools.TReflect 反射工具类
org.voovan.tools.TSQL SQL处理工具类
org.voovan.tools.TStream 流操作工具类
org.voovan.tools.TString 字符串操作工具类
org.voovan.tools.TZip 压缩数据处理工具类

##二、日志工具类 在使用 log4j 等日志工具的时候,我们需要再类的头部定义一个:

private final Logger logger = Logger.getLogger(SendMsgStartup.class);

如上的定义,你是不是很烦.还有那复杂的配置文件,每次都要纠结好一阵子.那么就使用这个简单的工具类吧. 下面来介绍一下这个简单的配置文件

  • 1.无须在类的头部定义 private 的私有 loger 变量.直接使用 Logger 静态类,方便快捷。
  • 2.配置文件极其简单,仅有日志的级别,输入流定义,模板定义,日志缩进定义等简单的几种,满足常规使用。

####2.1 日志配置文件

#日志输出类型 使用FILE,STDOUT,STDERR等输出特定级别的日志,","分割
#Value: FILE,STDOUT,STDERR, more then one use "," split
LogType=STDOUT
#日志输出文件,在日志输出类型为 FILE 时会输出到这个文件
LogFile=/Users/helyho/Work/Java/MyPlatform/sysout.log
InfoIndent={{s}}
#输出日志级别定义,如果使用 ALL 则输出全部类型的日志,使用SIMPLE,INFO,DEBUG,WARN,ERROR,FALAT等输出特定级别的日志,","分割
#Value: ALL,SIMPLE,INFO,DEBUG,WARN,ERROR,FALAT, more then one use "," split
LogLevel = ALL
#日志模板
LogTemplate=--------------------------------------------------------------------------------------------------------------------------------------------------{{n}}[{{p}}] [{{d}}] [Thread:{{t}}] [Time:{{r}}] ({{f}}:{{l}}) {{n}}--------------------------------------------------------------------------------------------------------------------------------------------------{{n}}{{i}}{{n}}{{n}}

配置文件指代符号说明: 指代符号定义{{}}

 *{{s}}:  一个空格
 *{{t}}:  制表符
 *{{n}}:  换行
 *{{I}}:  消息内容,即要展示的日志内容
 *{{F}}:  源码文件名
 *{{SI}}: 栈信息输出
 *{{L}}:  当前代码的行号
 *{{M}}:  当前代码的方法名
 *{{C}}:  当前代码的类名称
 *{{T}}:  当前线程名
 *{{D}}:  当前系统时间
 *{{R}}:  从启动到当前代码执行的事件

####2.3 日志类使用

public static void debug(Object msg)
public static void info(Object msg)
public static void warn(Object msg)
public static void warn(Exception e)
public static void warn(Object msg,Exception e)
public static void error(Object msg) 
public static void error(Exception e)
public static void error(Object msg,Exception e)
public static void fatal(Object msg)
public static void fatal(Exception e)
public static void fatal(Object msg,Exception e)
public static void simple(Object msg)
  • 输入日志信息
  • msg: 日志消息,这里调用对象的 toString()方法输出特定日志。

注意:Simple 输出方法不会使用日志模板,而是直接输出日志对象


##三、对象工具类 ####3.1 使用类 org.voovan.tools.json.JSON ####3.2 强制类型转换方法 #####3.2.1 强制类型转换方法

public static <T> T cast(Object obj)             //通过范型自推断类型
public static <T> T cast(Object obj,Class<T> t)  //转换成指定类型
  • obj: 被转换对象。
  • 返回值: 转换后的对象。

#####3.2.2 空值默认值

public static <T>T nullDefault(T source,T defValue)
  • source: 检测对象。
  • defValue: null 值替换值。
  • 返回值: 如果非 null 则返回 source,如果为 null 则返回 defValue。

#####3.2.3 快速构造 List 或者 Map

public static List newList(Object ...objs)
  • objs: List 列表的每一个元素。
  • 返回值: 初始化完成的List对象。
public static Map newMap(Object ...objs)
  • objs: 每两个参数组成一个键值对,来初始化一个 Map. 如:key1,value1,key2,value2.....。
  • 返回值: 初始化完成的Map对象。

##四、流操作工具类 ####4.1 使用类 org.voovan.tools.TStream

####4.2 强制类型转换方法 #####4.2.1 从 InputStream 读取一行

public static String readLine(InputStream inputStream) 
  • inputStream: InputStream对象。
  • 返回值: 读取的字符串。

#####4.2.2 从 InputStream 读取定长字符串

public static byte[] read(InputStream inputStream,int length) 
  • inputStream: InputStream对象。
  • length: 指定长度。
  • 返回值: 读取的 byte 数组。

#####4.2.3 从 InputStream 分割读取

public static byte[] readWithSplit(InputStream inputStream,byte[] splitByte) 
  • inputStream: InputStream对象,没调用一次返回一个分割褚的 byte 数组,流结束返回 null。
  • splitByte: 用于分割的 byte 数组。
  • 返回值: 读取的 byte 数组。

#####4.2.4 从 InputStream 读取全部字节

public static byte[] readAll(InputStream inputStrem)
  • inputStream: InputStream对象,没调用一次返回一个分割褚的 byte 数组,流结束返回 null。
  • 返回值: 读取的 byte 数组。

#####4.2.4 字节数组拼接

public static byte[] byteArrayConcat(byte[] firstBytes,int firstBytesLength, byte[] lastBytes,int lastBytesLength)
  • firstBytes: 首个字节数组。
  • firstBytesLength: 首个字节数组长度。
  • lastBytes: 拼接在后的字节数组。
  • lastBytesLength: 拼接在后的字节数组长度。
  • 返回值: 读取的 byte 数组。

##五、ByteBuffer双向通道 ####5.1 使用类 org.voovan.tools.ByteBufferChannel ByteChannel接口的实现,具体使用方法请参照ByteChannel类


##六、字符串工具类 ####6.1 使用类 org.voovan.tools.TString ####6.2 方法说明 #####6.2.1 移除字符串前缀

public static String removePrefix(String source)
  • source: 目标字符串。
  • 返回值: 移除第一个字节后的字符串。

#####6.2.2 移除字符串后缀

public static String removeSuffix(String source)
  • source: 目标字符串。
  • 返回值: 移除最后一个字节后的字符串。

#####6.2.3 左补齐

public static String leftPad(String source,int len,char c)
  • source: 目标字符串。
  • len: 补齐后字符串的长度。
  • c: 用于补齐的字符串。
  • 返回值: 补齐后的字符串。

#####6.2.4 右补齐

public static String rightPad(String source,int len,char c)
  • source: 目标字符串。
  • len: 补齐后字符串的长度。
  • c: 用于补齐的字符串。
  • 返回值: 补齐后的字符串。

#####6.2.5 判断是否是指定进制的数字字符串

public static boolean isNumber(String numberString,int radix)
  • source: 目标字符串。
  • radix: 进制。
  • 返回值: 是否是指定进制的数字字符串。

#####6.2.6 判断是否是整形数

public static boolean isInteger(String integerString)
  • source: 目标字符串。
  • 返回值: 是否是整形数。

#####6.2.7 判断是否是浮点数

public static boolean isFloat(String floadString)
  • source: 目标字符串。
  • 返回值: 是否是浮点数。

#####6.2.8 正则表达式查找

public static String[] searchByRegex(String source,String regex)
  • 正则表达式查找,匹配的被提取出来做数组。
  • source: 目标字符串。
  • regex: 正则表达式。
  • 返回值: 匹配的字符串数组。

#####6.2.9 判断字符串空指针或者内容为空

public static boolean isNullOrEmpty(String source)
  • source: 目标字符串。
  • 返回值: 字符串空指针或者内容为空时 true。

#####6.2.10 按照标识符 Map 进行替换

public static String tokenReplace(String source,Map<String, String> tokens)
  • source: 源字符串,标识符使用"{{标识}}"进行包裹,这些标识符将会被替换。
  • tokens: 标识符Map集合。
  • 返回值: 替换后的字符串。

#####6.2.11 按照标识符进行替换

public static String tokenReplace(String source,String tokenName,String tokenValue)
  • source: 源字符串,标识符使用"{{标识}}"进行包裹。
  • tokenName: 标识符。
  • tokenValue: 标志符值。
  • 返回值: 替换后的字符串。

#####6.2.12 按位置格式化字符串

public static String format(String source,String ...args)
  • 按位置格式化字符串,TString.format("aaaa{}bbbb{}cccc{}", "1","2","3"),输出aaaa1bbbb2cccc3
  • source: 目标字符串。
  • args: 对应位置的字符串。
  • 返回值: 格式化后的字符串。

#####6.2.13 替换第一个标志字符串

public static String replaceFirst(String source,String mark,String replacement)
  • source: 目标字符串。
  • mark: 标识字符串。
  • replacement: 替换字符串
  • 返回值: 替换化后的字符串。

#####6.2.14 替换最后一个标志字符串

public static String replaceLast(String source,String mark,String replacement)
  • source: 目标字符串。
  • mark: 标识字符串。
  • replacement: 替换字符串
  • 返回值: 替换化后的字符串。

##七、日期工具类 ####7.1 使用类 org.voovan.tools.TDateTime ####7.2 方法说明 #####7.2.1 获取当前时间

public static String now()
  • 返回值: 'yyyy-MM-dd HH:mm:ss'形式的日期。

#####7.2.2 获取当前时间

public static String now(String format)
  • format: 日志格式化字符串。
  • 返回值: 格式化后的日期字符串。

#####7.2.3 格式化日期成字符串

public static String format(Date date,String format)
  • date: 日期对象用于格式化。
  • format: 日志格式化字符串。
  • 返回值: 格式化后的日期字符串。

#####7.2.4 使用特定时区,格式化日期成字符串

public static String format(Date date,String format,String timeZone,Locale loacl)
  • date: 日期对象用于格式化。
  • format: 日志格式化字符串。
  • timeZone: 所在时区。
  • loacl: 所在区域。
  • 返回值: 格式化后的日期字符串。

#####7.2.5 获取标准的格林威治时间(GMT)

public static String formatToGMT(Date date)
  • date: 日期对象。
  • 返回值: 格式化后的格林威治时间字符串。

#####7.2.6 从字符串解析时间

public static Date parse(String source,String format)
  • source: 日期字符串。
  • format: 日志格式化字符串。
  • 返回值: 日期对象。

#####7.2.7 从字符串解析时间

public static Date parse(String source,String format,String timeZone,Locale loacl)
  • source: 日期字符串。
  • format: 日志格式化字符串。
  • timeZone: 所在时区。
  • loacl: 所在区域。
  • 返回值: 日期对象。

#####7.2.8 按格林威治时间(GMT)日期格式获取日期对象

public static Date parseToGMT(String source) 
  • source: 日期字符串。
  • 返回值: 日期对象。

#####7.2.9 日期加操作

public static Date add(Date date,long millis)
  • date: 加法的基数日期。
  • millis: 微秒。
  • 返回值: 加法操作后的日期对象。

##八、反射工具类 ####8.1 使用类 org.voovan.tools.TReflect ####8.2 方法说明 #####8.2.1 获得类所有的Field

public static Field[] getFields(Class<?> clazz)
  • clazz: 类对象。
  • 返回值: Field数组。

#####8.2.2 获取类中指定Field的值

static public <T> T getFieldValue(Object obj, String fieldName)
  • obj: 对象。
  • fieldName: field名称。
  • 返回值: Field值。

#####8.2.3 更新对象中指定的Field的值

public static void setFieldValue(Object obj, String fieldName, Object fieldValue)
  • 注意:对 private 等字段有效。
  • obj: 对象。
  • fieldName: field名称。
  • fieldValue: Field值。

#####8.2.4 将对象中的field和其值组装成Map

public static Map<String, Object> getFieldValues(Object obj)
  • 注意:静态字段(static修饰的)不包括。
  • obj: 对象。
  • 返回值: 对象中的field和其值组装成的Map。

#####8.2.5查找类中的方法

public static Method findMethod(Class<?> clazz, String name, Class<?>... paramTypes)
  • clazz: 类对象。
  • name: 方法名。
  • paramTypes: 方法参数类型。
  • 返回值: Method 对象。

#####8.2.6 获取类的方法集合

public static Method[] getMethods(Class<?> clazz)
  • clazz: 类对象。
  • 返回值: Method对象数组。

#####8.2.7 获取类的特定方法的集合

public static Method[] getMethods(Class<?> clazz,String name)
  • clazz: 类对象。
  • name: 方法名。
  • 返回值: Method对象数组。

#####8.2.8 使用对象执行它的一个方法

public static Object invokeMethod(Object obj, Method method, Object... parameters)
  • obj: 对象。
  • method: 方法对象。
  • parameters: 方法参数。
  • 返回值: 方法返回值。

#####8.2.9 使用对象执行方法

public static Object invokeMethod(Object obj, String name, Object... parameters)
  • obj: 对象。
  • name: 方法名。
  • parameters: 方法参数。
  • 返回值: 方法返回值。

#####8.2.10 构造新的对象

public static Object newInstance(Class<?> clazz, Object ...parameters)
  • clazz: 对象类。
  • parameters: 方法参数。
  • 返回值: 新构造的对象。

#####8.2.11 构造新的对象

public static Object newInstance(String className, Object ...parameters)
  • className: 类名称字符串。
  • parameters: 方法参数。
  • 返回值: 新构造的对象。

#####8.2.12 将对象数组转换成对象类型的数组

public static Class<?>[] getParameters(Object[] objs)
  • objs: 对象数组。
  • 返回值: 对象类型数组。

#####8.2.13 将Map转换成指定的对象

public static Object getObjectFromMap(Class<?> clazz, Map<String, Object> mapField) 
  • clazz: 对象类。
  • mapField: Map对象。
  • 返回值: Map转换成的对象。

#####8.2.14 将对象转换成 Map

public static Map<String, Object> getMapfromObject(Object obj)
  • obj: 对象。
  • 返回值: Object转换成的Map对象。

#####8.2.15 判断某个类型是否实现了某个接口

public static boolean isImpByInterface(Class<?> type,Class<?> interfaceClass)
  • type: 对象类型。
  • interfaceClass: 是否实现了这个接口。
  • 返回值: true 实现了这个接口,false 没有实现这个接口。

#####8.2.16 判断某个类型是否继承于某个类

public static boolean isExtendsByClass(Class<?> type,Class<?> extendsClass)
  • type: 对象类型。
  • interfaceClass: 是否继承于这个类。
  • 返回值: true 实现了这个接口,false 没有实现这个接口。

##九、JVM环境工具类 ####9.1 使用类 org.voovan.tools.TEnv ####9.2 方法说明 #####9.2.1 获得应用的工作根目录路径

public static String getContextPath()
  • 返回值: 应用的工作根目录路径。

#####9.2.2 使用相对路径获得系统的完整路径

public static String getSystemPath(String absolutePath)
  • absolutePath: 相对路径。
  • 返回值: 完整路径。

#####9.2.3 休眠函数

public static void sleep(int sleepTime)
  • sleepTime: 休眠事件,单位:毫秒。

#####9.2.4 获取当前栈信息

public static StackTraceElement[] getStackElements() 
  • 返回值: 当前栈对象数组。

#####8.2.5 获取当前栈信息

public static String getStackMessage()
  • 返回值: 当前栈信息字符串。

#####9.2.6 获取给定栈信息

public static String getStackElementsMessage(StackTraceElement[] stackTraceElements)
  • stackTraceElements: 栈数组。
  • 返回值: 栈信息字符串。

#####9.2.7 为JVM加载

public static void loadBinary(File file)
  • 为JVM加载一个jar包 或者一个目录到 classpath。
  • file: 文件对象。

#####9.2.8 为JVM加载

public static void loadBinary(String filePath) throws Exception
  • 为JVM加载一个jar包 或者一个目录到 classpath。
  • filePath: 文件路径。

#####9.2.9 递归并加载到JVM

public static void LoadJars(String directoryPath) throws Exception 
  • 从目录读取所有 Jar 文件,递归并加载到JVM。
  • directoryPath: 包含jar文件的路径。

#####9.2.10 获取JVM中的所有线程

public static Thread[] getJVMThreads()
  • 返回值: JVM中的所有线程。

##十、JSON 序列化工具类 简单的 JSON 序列化工具类,只有简单的三个方法:JAVA对象序列化、JSON字符串反序列化成对象,JSON字符串解析。

####10.1 使用类 org.voovan.tools.json.JSON

####10.1 方法说明 #####10.1.1 JAVA对象序列化方法

public static String toJSON(Object object)
  • 将 Java 对象 转换成 JSON字符串。
  • object: 待转换的对象。
  • 返回值: 转换后的 JSON 字符串。

#####10.1.2 JSON字符串反序列化方法

public static <T> T toObject(String jsonStr,Class<T> clazz)
  • 将 JSON字符串 转换成 Java 对象
  • jsonStr: 待转换的 JSON 字符串。
  • clazz: 转换的目标 java 类。
  • 返回值: 转换后的 Java 对象。

#####10.1.2 JSON字符串解析

public static Object parse(String jsonStr)
  • 解析 JSON 字符串
  • jsonStr: 待转换的 JSON 字符串。
  • 返回值: 如果是{}包裹的字符串解析成 HashMap,如果是[]包裹的字符串解析成 ArrayList。