java常用的工具类/第三方类库


java常用的工具类/第三方类库

在开发的过程中,有些代码直接用原生的语法写起来比较麻烦。
多掌握一些java常用的工具类、java常用的第三方类库,可以让我们提高效率,代码变得简洁优雅。

一、apache commons-lang

apache出品,java开发者经常会用到的工具类库。可以处理字符串、IO、集合等。

依赖:

      
        org.apache.commons
        commons-lang3
        3.12
      

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 readLines(InputStream input):将InputStream 流的内容,逐行转化为集合

List readLines(InputStream input, String encoding):将InputStream 流的内容,按照指定的编码,逐行转化为集合

byte[] toByteArray(InputStream input): 将InputStream 流的内容,转化为字节数组。

FileUtils

常用方法:

String readFileToString(File file): 读取文件的内容

List readLines(File file): 逐行读取文件的内容,返回集合。

Collection 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 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 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 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 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:

依赖:


	commons-collections
	commons-collections
	3.4

CollectionUtils

CollectionUtils类用于处理集合, 常用方法如下:

boolean isEmpty(Collection coll): 判断集合是否为空

boolean isNotEmpty(Collection coll): 判断集合是否不为空

int size(Object object): 计算集合的个数

示例:

List 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、散列、缓存、字符串等。

依赖:


	com.google.guava
	guava
	18.0

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 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 split(final CharSequence sequence) : 拆分字符串。

List 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 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 splitList = Lists.newArrayList( Splitter.on(",").split("a,,b,c"));
        System.out.println(splitList);
    }

    public static void testSplitOmitEmpty() {
        System.out.println("忽略空字符串,如下:");
        // 输出结果 [a, b, c]
        Iterable omit = Splitter.on(",").omitEmptyStrings().split("a,,b,c");
        System.out.println(omit);
    }
    
    public static void testFixedLength() {
        System.out.println("按固定长度拆分;最后一段可能比给定长度短,但不会为空。如下:");
        //输出结果为 a,,b 以及 ,c
        Iterable fixedLengths = Splitter.fixedLength(4).split("a,,b,c");
        for (String split : fixedLengths) {
            System.out.println(split);
        }
    }

Lists类

常用方法:

ArrayList newArrayList(): 初始化一个ArrayList

List> partition(List list, int size) : list分页,参数 list 表示被分割的集合, size表示每一页的数量。

示例:

public static void testPartition() {
    List list = Lists.newArrayList();
    list.add("lin");
    list.add("chen");
    list.add("wu");
    list.add("qiu");
    list.add("zhang");
    //分页,每页2个元素
    List> partitionList = Lists.partition(list, 2);
    if (CollectionUtils.size(partitionList) > 1) {
        //下标是从0开始的,获取第2页的元素,先判断集合的size,避免数组越界。
        List partList = partitionList.get(1);
        //结果为 [wu, qiu]
        System.out.println(partList);
    }
}

Maps类

常用方法:

HashMap newHashMap() : 初始化Map

示例如下:

Map map = Maps.newHashMap();

Table

Table是Guava中的一种数据结构,两个key对应一个value,相当于表格,某行某列对应一个值。

  • 常用方法:
//以下泛型,R表示Row(行),C表示Column(列), V表示Value(值)。
 HashBasedTable create(): 创建一个Table

V put(R rowKey, C columnKey, V value): 在Table中指定行,指定列,放入对应的值。

V get(@Nullable Object rowKey, @Nullable Object columnKey): 获取Table指定行,指定列的值。行和列不能为空。

Map row(R rowKey): 获取某一行的所有数据。

Map column(C columnKey);  获取某一列的所有数据。

Set> cellSet(); 获取Table的所有数据

示例:

    public static void testTable() {
        Table table = HashBasedTable.create();

        table.put("第一行", "第一列", 11);
        table.put("第一行", "第二列", 12);
        table.put("第二行", "第一列", 13);
        //获取Table的所有数据
        Set> cellSet = table.cellSet();
        System.out.println("cellSet:" + cellSet);
        for (Table.Cell 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 rowMap = table.row("第一行");

        Map 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