1. 简介
Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动。
2. Commons-Lang
1) 重写Object中的方法
一个合格的类应该重写toString,hashCode,equals,compareTo方法,我们来看一下apache如何带我们简化这些操作,通过逐个参数添加从而精细控制那些参数参与比较和输出
public class User implements Comparable{ private int id; private String userName; public User(int id, String userName) { this.id = id; this.userName = userName; } //输出格式为: com.blue.skymons.User@2626b418[102,yuanda] @Override public String toString() { return new ToStringBuilder(this).append(this.getId()) .append(this.getUserName()).toString(); } @Override public int hashCode() { return new HashCodeBuilder().append(this.getId()) .append(this.getUserName()).hashCode(); } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (obj.getClass() == User.class) { User test = (User) obj; return new EqualsBuilder().append(this.getId(), test.getId()) .append(this.getUserName(), test.getUserName()).isEquals(); } return false; } @Override public int compareTo(User o) { return new CompareToBuilder().append(this.getId(), o.getId()) .append(this.getUserName(), o.getUserName()).toComparison(); } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public static void main(String[] args) { User u1 = new User(1, "yd"); User u2 = new User(2, "yj"); System.out.println(u1); System.out.println(u1.hashCode()); System.out.println(u1.equals(u2)); System.out.println(u1pareTo(u2)); }}
2)ArrayUtils类
简化数组的操作
//测试ArrayUtils操作public static void testArrayUtils() { int[] nums1 = {1, 2, 3, 4, 6, 9}; int[] nums2 = {2, 6, 5}; int[] nums3 = {1, 2, 3, 4, 6, 9}; //两个数组是否相等 System.out.println(Arrays.equals(nums1, nums1)); //true System.out.println(Arrays.equals(nums2, nums1)); //false System.out.println(Arrays.equals(nums1, nums3)); //true int[] nums4 = ArrayUtils.subarray(nums1, 2, 4); System.out.println(ArrayUtils.toString(nums4, "数组为空")); //显示数组的中的元素 ArrayUtils.reverse(nums2); //反转数组 System.out.println(ArrayUtils.toString(nums2, "数组为空")); System.out.println(ArrayUtils.contains(nums2, 5)); //数组中是否包含某个元素 int[] nums5 = ArrayUtils.addAll(nums1, nums2); //合并两个数组 System.out.println(ArrayUtils.toString(nums5));}
3)StringUtils类
用来操作字符串
public static void testStringUtils() { String str = "Hello World"; // isEmpty和isBlank的区别在于isEmpty不会忽略空格, // " "对于这样的字符串isEmpty会认为不是空, // 而isBlank会认为是空,isBlank更常用 System.out.println(StringUtils.isEmpty(str)); System.out.println(StringUtils.isBlank(str)); // strip --> 去除两端的aa // stripStart --> 去除开始位置的hell // stripEnd --> 去除结尾位置的orld System.out.println(StringUtils.strip(str, "aa")); System.out.println(StringUtils.stripStart(str, "Hell")); System.out.println(StringUtils.stripEnd(str, "orld")); System.out.println(str); // 返回字符串在第三次出现A的位置 System.out.println(StringUtils.ordinalIndexOf(str, "A", 3)); // 统计第二个参数在字符串中出现的次数 System.out.println(StringUtils.countMatches(str, "l")); // 判断字符串是否全小写或大写 System.out.println(StringUtils.isAllLowerCase(str)); System.out.println(StringUtils.isAllUpperCase(str)); // isAlpha --> 全部由字母组成返回true // isNumeric -->全部由数字组成返回true // isAlphanumeric -->全部由字母或数字组成返回true // isAlphaSpace -->全部由字母或空格组成返回true // isWhitespace -->全部由空格组成返回true System.out.println(StringUtils.isAlpha("sdf")); System.out.println(StringUtils.isNumeric("12.2")); //不能包含. System.out.println(StringUtils.isAlphanumeric("sd23fd")); System.out.println(StringUtils.isAlphaSpace("fs ss22")); System.out.println(StringUtils.isWhitespace(" f")); // 首字母大写或小写 System.out.println(StringUtils.capitalize(str)); System.out.println(StringUtils.uncapitalize(str)); // 将字符串数组转变为一个字符串,通过","拼接,支持传入iterator和collection System.out.println(StringUtils.join(new String[]{"Hello", "World"}, ","));}
4)FileUtils类
在Java当中,由于IO架构采用了装饰器模式,以至于JavaIO操作可谓是繁杂无比,特别经常需要访问文件系统,操作文件夹/文件,读取字符流转换成字符串等操作,都是一些重复性的操作
public class TestFile { public static final String TEST_DIRECTORY_PATH_1 = "D:/directory1"; public static final String TEST_DIRECTORY_PATH_2 = "D:/directory2"; //目录 public static final File DIRECTORY_1 = new File(TEST_DIRECTORY_PATH_1); public static final File DIRECTORY_2 = new File(TEST_DIRECTORY_PATH_2); public static final String TEST_FILE_PATH_1 = "D:/directory1/1.txt"; public static final String TEST_FILE_PATH_2 = "D:/directory2/3.txt"; //文件 public static final File FILE_1 = new File(TEST_FILE_PATH_1); public static final File FILE_2 = new File(TEST_FILE_PATH_2); public static final String FILE_NAME = "D:/directory1/helloworld.txt"; //对目录和文件的操作 public static void testFileUtils() throws IOException { // 清空某目录下的所有目录,含文件夹和文件 FileUtils.cleanDirectory(DIRECTORY_2); // 将参数1目录下的全部内容复制到参数2目录 FileUtils.copyDirectory(DIRECTORY_1, DIRECTORY_2); // 将参数1目录整个复制到参数2目录下 FileUtils.copyDirectoryToDirectory(DIRECTORY_1, DIRECTORY_2); // copy參數1文件到參數2 FileUtils.copyFile(FILE_1, FILE_2); // copy參數1文件到參數2目錄下 FileUtils.copyFileToDirectory(FILE_1, DIRECTORY_2); // 将文件转为InputStrem FileUtils.openInputStream(FILE_1); // FileUtils.openOutputStream(FILE_1); // 读取文件转为字节数组 //FileUtils.readFileToByteArray(FILE_1); // 读取文件转换为String类型,方便文本读取 System.out.println(FileUtils.readFileToString(FILE_1, "UTF-8")); // 写字符串到参数1文件中 FileUtils.writeStringToFile(FILE_1, "test", "UTF-8"); System.out.println(FileUtils.readFileToString(FILE_1, "UTF-8")); // 强制删除文件 //FileUtils.forceDelete(FILE_1); } //对文件名的操作 public static void testFileUtils2() { // 获取文件后缀名 String extensionName = FilenameUtils.getExtension(FILE_NAME); System.out.println(extensionName); //txt // 获取文件路径,忽略分割符 / String fullPath1 = FilenameUtils.getFullPathNoEndSeparator(FILE_NAME); System.out.println(fullPath1); //D:/directory1 // 获取文件路径,不忽略分隔符 String fullPath2 = FilenameUtils.getFullPath(FILE_NAME); System.out.println(fullPath2); //D:/directory1/ // 获取文件名,不包含后缀 String baseName = FilenameUtils.getbaseName(FILE_NAME); System.out.println(baseName); //helloworld // 获取文件名,含后缀 String name = FilenameUtils.getName(FILE_NAME); System.out.println(name); //helloworld.txt // 获取盘符 String prefix = FilenameUtils.getPrefix(FILE_NAME); System.out.println(prefix); //D:/ // 通配符匹配 Boolean isMatch = FilenameUtils.wildcardMatch(FILE_NAME, "D:/directory1*"); System.out.println(isMatch); //true } public static void main(String[] args) throws IOException { testFileUtils(); testFileUtils2(); }}
其他的等具体使用到了再添加….