Apache Commons工具使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 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();
    }
}

其他的等具体使用到了再添加….

猜你喜欢

转载自blog.csdn.net/jiangxishidayuan/article/details/52301477