文章目录
Commons类库
工具类就是为了提高开发效率而出现的,很多实现逻辑方式是固定的,那么就可以作为工具类使用,不需要重复实现,简化代码。
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.getOutputStream(