工具类就是为了提高开发效率而出现的,很多实现逻辑方式是固定的,那么就可以作为工具类使用,不需要重复实现,简化代码。

StringUtils

StringUtils是我们开发过程中常用的工具类,其中的的方法也比较熟悉,比如

两个字符串的比较

//比较两个字符串是否相同,即使a或者b有为空的情况,那么也能比较不会出现空指针现象
        String a = "A";
        String b = "B";
        if (StringUtils.equals(a,b)){
            System.out.println("a和b相同");
        }else {
            System.out.println("a和b不相同");
        }
        
//超类Object有相同功能的方法equals,但是如a为空,那么就会出现空指针现象
        String b = "B";
        if (a.equals(b)){
            System.out.println("a和b相同");
        }else {
            System.out.println("a和b不相同");
        }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

判断字符串是否为空

//判断字符串是否为空StringUtils工具类中有多个方法,可以根据注释了解每种方法的具体使用方式
StringUtils.isAllBlank(a);       StringUtils.isBlank(a);        StringUtils.isAnyBlank(a);
StringUtils.isAllEmpty(a);       StringUtils.isEmpty(a);        StringUtils.isAnyEmpty(a);

//其中isBlank和isEmpty的区别在于如果字符串为空格字符串如:" ",那么isBlank会认为空返回true,而isEmpty不认为是空,返回false,其他方法类似
//当然StringuUtils也有对应判断字符串不为空的方法,即在以上方法中名中加一个Not,如:isNotBlank
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

判断包含关系

//判断某个字符串是否包含另外一个字符串,StringUtils中提供了过个方法,其实通过方法名就能猜到每个方法的使用方式
StringUtils.contains(a,b);
StringUtils.containsAny(a,b);
StringUtils.containsNone(a,b);
StringUtils.containsOnly(a,b);
  • 1
  • 2
  • 3
  • 4
  • 5

其实StringUtils中很多方法与String中的方法相同,但是可以避免空指针异常,比如:

String中有方法startWith() 和 endWith() 若一个字符串为空的时候调用方法就会报空指针异常,但是使用StringUtils就可以避免

//若a为字符串,但是可能为空,那么就可能出现空指针
boolean rs = a.endWith("b");

//若使用工具类StringUtils,那么即使a为空也不会出现空指针
boolean rs = StringUtils.endWith(a,"b");
  • 1
  • 2
  • 3
  • 4
  • 5

StringUtils工具类还有其他的一些String用到的方法

StringUtils.replace() 将字符串中某些内容替换

StringUtils.indexOf() 判断某个字符在字符串中的第一次出现的下标位置

StringUtils.lastIndexOf() 判断某个字符在字符串中最后一次出现的位置

。。。。


DateUtils

DateUtils工具类我们通过类名就能明白这个类是对时间操作的工具类。

日期增加

如果我们想在当前时间推后一天,若按照以前的方式我们可能需要判断目前的日期是的“日”是哪一天,如果是“30日”还需要判断,月份是哪个月,有没有31日,如果是28日,或者29日,还需要判断是不是2月份,年份是闰年还是平年,如果是31日,还得判断是哪个月,如果是12月份,那么月份就不能直接加一,而是赋值为一,等等一系列判断,非常繁琐。那么使用DateUtils只需要一行代码就能解决。

//今天是2019年8月31日
String day = “2019年8月31日”;
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日");
Date today = dateFormat.parse(day);
Date  tomorrow= DateUtils.addDays(today, 1);
String rs = dateFormat.format(tomorrow);
System.out.println(rs)
   
结果:2019年09月01日
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

注意:如果今天的时间写错了,比如:2019年8月32日,那么系统会自动将今天的时间变成2019年9月1日,明天的时间则为2019年09月02日

除了添加一天的方法,也有添加一小时,一周的方法等

    DateUtils.addYears();   //添加年
    DateUtils.addMonths();  //添加月
    DateUtils.addWeeks();   //添加周
    DateUtils.addDays();    //添加天
    DateUtils.addHours();   //添加小时
    DateUtils.addMinutes(); //添加分钟
    DateUtils.addSeconds()  //添加秒
    。。。。。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

日期比较

日期比较也是我们常用到的时间处理方式,比较两个日期是否是同一天,那么可能需要先比较年,再比较月,最后比较日,整个代码比较繁琐,使用DateUtils工具类也是只需要一行代码就能解决。

//判断两个日期是否相同
boolean sameDay = DateUtils.isSameDay(date2, date1);
  • 1
  • 2

其他

DateUtils工具类还提供了将日期Date转换成日历的方法

Calendar calendar = DateUtils.toCalendar(date);
  • 1

CollectionUtils

CollectionUtils工具类是对集合的一些操作。可能我们平常最多用到的方法是判断集合是否为空

//CollectionUtils不仅可以判断Collection的子集合,也能判断Map是否为空
boolean empty = CollectionUtils.isEmpty(list);
  • 1
  • 2

判断两个集合是否有相同的元素

//判断两个集合如果有相同的元素返回true,反之返回false
boolean b = CollectionUtils.containsAny(list, list2);
  • 1
  • 2

将数组转换成list集合

//平常在代码中将数组转换成list可能常用的java.util包 Arrays.asList()
List<String> list = Arrays.asList(arr);

//CollectionUtils工具类也提供了将诉数组转换成list,返回的list是没有泛型的
List list = CollectionUtils.arrayToList(arr);
  • 1
  • 2
  • 3
  • 4
  • 5

获取集合list 或者 set 的最后一个元素

//我们如果想要获取list的最后一个元素的话可以使用下标,因为list的有序的
String last = list.get(list.size() - 1);
//但是如果要获取set集合的最后一个元素就比较麻烦,set的无序的没有下标,但是可以使用CollectionUtils工具类
String last = CollectionUtils.lastElement(set);
  • 1
  • 2
  • 3
  • 4

FileUtils

FileUtils工具类从名称也能看出来是对文件的一些操作。

拷贝文件或目录

复制文件或者文件夹,使用常规的方法,就会先从某个文件目录中读取文件或者文件夹,然后再写出到另外一个文件目录中,但是如果使用工具FileUtils就可以跟方便的实现,如下:

//将文件夹original中的文件全部拷贝到文件夹objective
        File srcDir = new File("G:\\original");
        File destDir = new File("G:\\objective");
        try {
            FileUtils.copyDirectory(srcDir,destDir);
        } catch (IOException e) {
            e.printStackTrace();
        }

//拷贝文件
        File srcFile = new File("G:\\original\\src\\test.txt");
        File destFile = new File("G:\\objective\\desc\\copy.txt");
        try {
            FileUtils.copyFile(srcFile,destFile);
        } catch (IOException e) {
            e.printStackTrace();
        }

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

上面的方法是将某个目录下的文件拷贝到另外的目录下,或者将某个文件拷贝到另外一个文件中,下面还有其他拷贝方法

//本方法是将目录original,整体拷贝到目录objective中,即在目录objective下面有个子目录original
         File srcDir = new File("G:\\original");
        File destDir = new File("G:\\objective");
       try {
            FileUtils.copyDirectoryToDirectory(srcDir,destDir);
        } catch (IOException e) {
            e.printStackTrace();
        }

//将text.txt文件拷贝到objective目录下,文件名保持原来的
       File srcFile = new File("G:\\original\\src\\test.txt");
       File file = new File("G:\\objective");
       try {
            FileUtils.copyFileToDirectory();
        } catch (IOException e) {
            e.printStackTrace();
        }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

删除文件或目录

FileUtils提供了删除文件或目录的方法,比如要清空某个文件目录下的所有内容,如下:

//清空目录objective下的所有内容,但是不删除objective目录
      File file = new File("G:\\objective");
       try {
            FileUtils.cleanDirectory(new File("G:\\objective"));
        } catch (IOException e) {
            e.printStackTrace();
        }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

与cleanDirectory()方法不同的还有一个删除目录的方法

//删除目录objective以及子目录子文件,即G盘下没有了objective目录
        File file = new File("G:\\objective");
        try {
            FileUtils.deleteDirectory(file);
        } catch (IOException e) {
            e.printStackTrace();
        }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

读写文件

FileUtils工具类中提供了一些读取文件的方法

//读取文件返回读取的内容字符串,另一个重载的方法可以设置编码
        String context = FileUtils.readFileToString(file);
        String context = FileUtils.readFileToString(file,encoding);
       
//读取文件返回字节数组
        byte[] bytes = FileUtils.readFileToByteArray(file);

//读取文件返回流
        FileInputStream fileInputStream = FileUtils.openInputStream(file);
        FileOutputStream fileOutputStream = FileUtils.openOutputStream(file);
        
//既然有读取文件内容的方法那么必然也有写的方法
       FileUtils.writeStringToFile(file,data);
       FileUtils.writeStringToFile(file,data,encoding);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

IOUtils

IOUtils是对流的操作,我们常常操作文件的时候就使用io流,所以上面FileUtils提到的文件复制也可以使用IOUtils实现,只是IOUtils是对文件流进行操作。

//IOUtils有多个重载的copy()方法,返回复制的字节数,示例如下:
        File srcFile = new File("G:\\original\\src\\test - 副本.txt");
        File destFile = new File("G:\\objective\\desc\\copy.txt");
        try {
            FileInputStream fileInputStream = FileUtils.openInputStream(srcFile);
            FileOutputStream fileOutputStream = FileUtils.openOutputStream(destFile);
            int copy = IOUtils.copy(fileInputStream, fileOutputStream);
            System.out.println(copy);
        } catch (IOException e) {
            e.printStackTrace();
        }

//copy方法
    	copy(InputStream input, OutputStream output)
    	copy(InputStream input, Writer output)
    	copy(InputStream input, Writer output, String encoding)
    	copy(Reader input, Writer output)
    	copy(Reader input, OutputStream output)
    	copy(Reader input, OutputStream output, String encoding)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

IOUtils还提供了两个重载的方法,用于判断两个流的内容是否相同,比如读取两个文件返回了流,那么想要判断两个文件的内容是否相同,那么可以使用IOUtils提供的方法

            FileInputStream fileInputStream1 = FileUtils.openInputStream(destFile);
            FileInputStream fileInputStream2 = FileUtils.openInputStream(destFile1);
            boolean b = IOUtils.contentEquals(fileInputStream1, fileInputStream);
            System.out.println(b);

//重载的方法
		  contentEquals(Reader input1, Reader input2)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

HttpClient

HttpClient是 Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。实现了所有 HTTP 的方法(GET,POST,PUT,HEAD 等)。以下是一个简单的Http请求使用GET方法

    //客户端
    public static void main(String[] args) {
        //创建httpClient实例
        HttpClient httpClient = new HttpClient();
        //创建一个GET方法
        GetMethod getMethod = new GetMethod("http://ip:port/MySpringBootDemo/api/test");
        try {
            //发起get请求
            int code = httpClient.executeMethod(getMethod);
            if (code != HttpStatus.SC_OK){
                System.out.println("请求异常");
            }
            byte[] responseBody = getMethod.getResponseBody();
            System.out.println(new String(responseBody,"utf-8"));
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            //释放连接
            getMethod.releaseConnection();
        }
    }
............................................................................................................
//服务端
@RestController
@RequestMapping("/api")
public class ConfigurationApplication {

    @RequestMapping("test")
    @ResponseBody
    public void getNpws(HttpServletResponse response){
        File file = new File("G:\\objective\\desc\\copy.txt");
        getFile(response,file);
    }
    
    private void getFile(HttpServletResponse response,File file) {
        try(
                OutputStream output = response.

相关文章:

  • 2021-12-18
  • 2021-12-24
  • 2021-09-28
  • 2021-11-03
猜你喜欢
  • 2022-02-18
  • 2021-11-15
  • 2021-10-14
  • 2022-12-23
  • 2021-07-18
  • 2022-03-04
相关资源
相似解决方案