版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jiangxishidayuan/article/details/52301477
1. 简介
Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动。
2. Commons-Lang
1) 重写Object中的方法
一个合格的类应该重写toString,hashCode,equals,compareTo方法,我们来看一下apache如何带我们简化这些操作,通过逐个参数添加从而精细控制那些参数参与比较和输出
public class User implements Comparable<User> {
private int id;
private String userName;
public User(int id, String userName) {
this.id = id;
this.userName = userName;
}
//输出格式为: com.blue.sky.commons.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(u1.compareTo(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();
}
}
其他的等具体使用到了再添加….