java常用的工具类/第三方类库
在开发的过程中,有些代码直接用原生的语法写起来比较麻烦。
多掌握一些java常用的工具类、java常用的第三方类库,可以让我们提高效率,代码变得简洁优雅。
一、apache commons-lang
apache出品,java开发者经常会用到的工具类库。可以处理字符串、IO、集合等。
依赖:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.12</version>
</dependency>
StringUtils:
用于处理字符串,常用的方法有
boolean isEmpty(CharSequence cs):判断字符串是否为空,字符串为null或者字符串长度为0时返回true
boolean isBlank(CharSequence cs):判断字符串是否为空格符(空格、换行符、制表符、tab 等)
boolean isNotEmpty(CharSequence cs):判断字符串是否不为空
boolean isNotBlank(CharSequence cs):判断字符串是否不为空格符
示例:
String name = "lin";
if (StringUtils.isNotBlank(name)) {
}
IOUtils:
用于处理IO流。
常见方法:
String toString(InputStream input): 将InputStream 流的内容,转化为字符串。
String toString(InputStream input, String encoding):将InputStream 流的内容,按照指定的编码,转化为字符串。
List<String> readLines(InputStream input):将InputStream 流的内容,逐行转化为集合
List<String> readLines(InputStream input, String encoding):将InputStream 流的内容,按照指定的编码,逐行转化为集合
byte[] toByteArray(InputStream input): 将InputStream 流的内容,转化为字节数组。
FileUtils
常用方法:
String readFileToString(File file): 读取文件的内容
List<String> readLines(File file): 逐行读取文件的内容,返回集合。
Collection<File> listFiles(File directory, String[] extensions, boolean recursive) : 指定文件后缀如txt,遍历文件夹中的文件。
参数extensions是文件后缀,布尔参数recursive表示是否遍历所有的子文件夹。
writeStringToFile(File file, String data) : 清除文件原来的内容,在文件后面追加内容。
writeStringToFile(File file, String data, boolean append):布尔参数append为true时,表示不清除文件原来的内容,在文件后面追加内容。
writeLines(File file, Collection<?> lines):清除文件原来的内容,在文件后面写入新的内容,逐行地写。
writeLines(File file, Collection<?> lines, boolean append):布尔参数append为true时,表示不清除文件原来的内容,在文件后面逐行追加内容,逐行地写。
示例:
public static void testReadFile() throws IOException {
//读取文件
String result = FileUtils.readFileToString(new File("E:\\test.txt"));
System.out.println(result);
}
private static void testReadLines() throws IOException {
//逐行读取文件
List<String> lines = FileUtils.readLines(new File("E:\\test.txt"));
System.out.println(lines);
}
public static void testListFile() {
// 指定文件后缀如txt,遍历文件夹中的文件。注意,此处的test是文件夹名称,没有后缀。
File directory = new File("E:\\test");
Collection<File> files = FileUtils.listFiles(directory, new String[]{"txt"}, false);
System.out.println(files);
}
public static void testWriteString() throws IOException {
File file = new File("E:\\test.txt");
//清除文件原来的内容,在文件中写入新的内容。
FileUtils.writeStringToFile(file,"testWriteString");
String content = FileUtils.readFileToString(file);
System.out.println(content);
}
public static void testWriteStringAppend() throws IOException {
File file = new File("E:\\test.txt");
//不清除文件原来的内容,在文件后面追加内容。
FileUtils.writeStringToFile(file,"testWriteStringAppend", true);
String content = FileUtils.readFileToString(file);
System.out.println(content);
}
public static void testWriteLine() throws IOException {
File file = new File("E:\\test.txt");
// 可以一行行写入文本
List<String> lines = new ArrayList<>();
lines.add("test");
lines.add("testWriteLine");
FileUtils.writeLines(file,lines);
String content = FileUtils.readFileToString(file);
System.out.println(content);
}
public static void testWriteLineAppend() throws IOException {
File file = new File("E:\\test.txt");
// 可以一行行写入文本
List<String> lines = new ArrayList<>();
lines.add("test");
lines.add("testWriteLineAppend");
//不清除文件原来的内容,在文件后面追加内容。
FileUtils.writeLines(file,lines, true);
String content = FileUtils.readFileToString(file);
System.out.println(content);
}
二、commons-collections:
依赖:
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>3.4</version>
</dependency>
CollectionUtils
CollectionUtils类用于处理集合, 常用方法如下:
boolean isEmpty(Collection coll): 判断集合是否为空
boolean isNotEmpty(Collection coll): 判断集合是否不为空
int size(Object object): 计算集合的个数
示例:
List<String> list = new ArrayList<>();
int size = CollectionUtils.size(list);
if (CollectionUtils.isEmpty(list)) {
}
三、Objects
jdk自带的类,用于处理对象,判空,转换字符串等。
Objects常用方法:
String toString(Object o): 将对象转换字符串,由于方法内使用了String.valueOf(),如果对象为 null,返回的是 "null"字符串。
String toString(Object o, String nullDefault): 将对象转换字符串,如果对象为 null,就返回指定的默认值。
boolean isNull(Object obj): 判断对象是否为空
boolean nonNull(Object obj): 判断对象是否不为空
示例:
String name = Objects.toString( null , "0");
if (Objects.isNull(name)) {
}
四、Google Guava
谷歌出品的,非常实用。包含集合、并发、I/O、散列、缓存、字符串等。
依赖:
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>18.0</version>
</dependency>
Joiner
Joiner可以连接字符串。
常用方法:
Joiner on(String separator): 指定连接的符号
Joiner skipNulls() : 跳过null
String join(@Nullable Object first, @Nullable Object second, Object... rest): 连接多个字符串
示例如下:
public static void testJoiner() {
//使用;来连接多个字符串,跳过null
Joiner joiner = Joiner.on("; ").skipNulls();
String join = joiner.join("Harry", null, "Ron", "Hermione");
System.out.println(join);
List<Integer> list = Arrays.asList(1, 5, 7);
//list使用逗号连接
String result = Joiner.on(",").join(list);
System.out.println(result);
}
Splitter
Splitter可以用来分隔字符串。
常用方法:
Splitter on(final String separator):指定Splitter的分隔符。
Iterable<String> split(final CharSequence sequence) : 拆分字符串。
List<String> splitToList(CharSequence sequence):拆分字符串,并转换成集合。
注意,splitToList使用了@Beta注解,带有@Beta注解的类或方法可能会发生变化。
它们可以随时以任何方式进行修改,甚至可以删除。不推荐使用。
Splitter 返回List,可以使用 Lists.newArrayList(splitter.split(string))
Splitter omitEmptyStrings(): 从结果中自动忽略空字符串。
Splitter fixedLength(final int length): 按固定长度拆分;最后一段可能比给定长度短,但不会为空。
示例如下:
public static void testSplit() {
Splitter splitter = Splitter.on(",");
System.out.println("按分隔符,去拆分字符串.如下:");
Iterable<String> splits = splitter.split("a,,b,c");
//遍历splitter的结果为 Iterable
for (String split : splits) {
System.out.println(split);
}
}
public static void testSplitList() {
System.out.println("split返回 list,如下:");
// 输出结果 [a, , b, c]
List<String> splitList = Lists.newArrayList( Splitter.on(",").split("a,,b,c"));
System.out.println(splitList);
}
public static void testSplitOmitEmpty() {
System.out.println("忽略空字符串,如下:");
// 输出结果 [a, b, c]
Iterable<String> omit = Splitter.on(",").omitEmptyStrings().split("a,,b,c");
System.out.println(omit);
}
public static void testFixedLength() {
System.out.println("按固定长度拆分;最后一段可能比给定长度短,但不会为空。如下:");
//输出结果为 a,,b 以及 ,c
Iterable<String> fixedLengths = Splitter.fixedLength(4).split("a,,b,c");
for (String split : fixedLengths) {
System.out.println(split);
}
}
Lists类
常用方法:
ArrayList<E> newArrayList(): 初始化一个ArrayList
List<List<T>> partition(List<T> list, int size) : list分页,参数 list 表示被分割的集合, size表示每一页的数量。
示例:
public static void testPartition() {
List<String> list = Lists.newArrayList();
list.add("lin");
list.add("chen");
list.add("wu");
list.add("qiu");
list.add("zhang");
//分页,每页2个元素
List<List<String>> partitionList = Lists.partition(list, 2);
if (CollectionUtils.size(partitionList) > 1) {
//下标是从0开始的,获取第2页的元素,先判断集合的size,避免数组越界。
List<String> partList = partitionList.get(1);
//结果为 [wu, qiu]
System.out.println(partList);
}
}
Maps类
常用方法:
HashMap<K, V> newHashMap() : 初始化Map
示例如下:
Map<String, String> map = Maps.newHashMap();
Table
Table是Guava中的一种数据结构,两个key对应一个value,相当于表格,某行某列对应一个值。
- 常用方法:
//以下泛型<R, C, V>,R表示Row(行),C表示Column(列), V表示Value(值)。
<R, C, V> HashBasedTable<R, C, V> create(): 创建一个Table
V put(R rowKey, C columnKey, V value): 在Table中指定行,指定列,放入对应的值。
V get(@Nullable Object rowKey, @Nullable Object columnKey): 获取Table指定行,指定列的值。行和列不能为空。
Map<C, V> row(R rowKey): 获取某一行的所有数据。
Map<R, V> column(C columnKey); 获取某一列的所有数据。
Set<Cell<R, C, V>> cellSet(); 获取Table的所有数据
示例:
public static void testTable() {
Table<String, String, Integer> table = HashBasedTable.create();
table.put("第一行", "第一列", 11);
table.put("第一行", "第二列", 12);
table.put("第二行", "第一列", 13);
//获取Table的所有数据
Set<Table.Cell<String, String, Integer>> cellSet = table.cellSet();
System.out.println("cellSet:" + cellSet);
for (Table.Cell<String, String, Integer> cell : cellSet) {
String rowKey = cell.getRowKey();
String columnKey = cell.getColumnKey();
Integer value = cell.getValue();
System.out.println("row:" + rowKey + " ,column:" + columnKey + ",value:" + value);
}
System.out.println("cellSet结束:" + cellSet);
//获取对应行,对应列的数据
Integer value = table.get("第一行", "第二列");
System.out.println(value);
//获取第一行的数据
Map<String, Integer> rowMap = table.row("第一行");
Map<String, Integer> columnMap = table.column("第一列");
System.out.println(columnMap);
}
待补充
参考资料:
https://ifeve.com/google-guava/
https://www.techug.com/post/java-libs-you-should-know.html
https://blog.csdn.net/qq_15717719/article/details/114012722
https://juejin.cn/post/6844904154113146894