作为一个Java程序员,这 8 个开源类库你必须知道!
发布日期:2021-04-30 21:10:15 浏览次数:101 分类:精选文章

本文共 7809 字,大约阅读时间需要 26 分钟。

8 个 Java 工具类及其常用方法分享

在 Java 开发过程中,工具类是每个程序员的良好伙伴。它们可以帮助我们高效解决问题,提升开发效率。本文将为大家介绍 8 个常用的 Java 工具类及其实用方法,并附带开发实例,帮助开发者更好地理解和应用这些工具。


1. IOUtils

类名org.apache.commons.io.IOUtils

简介

IOUtils 是一个操作 IO 流的工具类,常用于处理文件和字节流操作。它提供了一系列便捷的方法,能够简化 IO 操作。

常用方法

  • closeQuietly():关闭 IO 流,并忽略 null 值和异常。
    IOUtils.closeQuietly(output);
  • copy():将字节从输入流复制到输出流。
    IOUtils.copy(inputStream, new FileOutputStream(File));
  • toByteArray():将输入流内容以 byte[] 形式获取。
    Connection conn = new URL(url).openConnection();
    InputStream is = conn.getInputStream();
    byte[] result = IOUtils.toByteArray(is);
  • write():将字符或字节写入输出流。
    IOUtils.write("沉默王二", response.getOutputStream(), "UTF-8");
  • toInputStream():将字符串转换为输入流。
    String content = req.getParameter("content");
    InputStream inputStream = IOUtils.toInputStream(content, "utf-8");
  • readLines():从输入流中读取一行一行的字符串。
    List
    lines = IOUtils.readLines(new InputStreamReader(new FileInputStream(file), "utf-8"));
  • copyLarge():高效复制大文件内容。
    private File downloadFile(HttpResponse response) {
    File dir = new File("downloadedFiles");
    if (!dir.exists()) {
    dir.mkdir();
    }
    File outputFile = new File("downloadedFiles/temp" + RandomStringUtils.randomAlphanumeric(3));
    try {
    IOUtils.copyLarge(response.getEntity().getContent(), new FileOutputStream(outputFile));
    } catch (Exception e) {
    throw new RuntimeException(e);
    } finally {
    request.releaseConnection();
    }
    }
  • readFully():将输入流内容读入字节数组。
    byte[] intArray = new byte[Bytes.SIZEOF_INT];
    IOUtils.readFully(in, intArray);

2. FileUtils

类名org.apache.commons.io.FileUtils

简介

FileUtils 用于操作文件和目录,提供了文件管理、复制、删除等功能,极大简化了文件操作逻辑。

常用方法

  • deleteDirectory():删除指定目录。
    FileUtils.deleteDirectory(file);
  • readFileToString():将文件内容读入字符串。
    String fileAsString = FileUtils.readFileToString(reportFile);
  • deleteQuietly():安全删除文件,不抛出异常。
    FileUtils.deleteQuietly(outputFile);
  • copyFile():文件复制。
    FileUtils.copyFile(source, dest);
  • writeStringToFile():将字符串写入文件。
    FileUtils.writeStringToFile(templateFile, generatedText, Charset.forName("UTF-8"));
  • forceMkdir():强制创建目录。
    File uploadDirectory = new File(this.uploadPath);
    if (!uploadDirectory.exists()) {
    FileUtils.forceMkdir(uploadDirectory);
    }
  • write():将字符写入文件。
    FileUtils.write(new File("C:\\Users\\cmower\\test.txt"), "沉默王二", "utf-8");
  • listFiles():列出目录下的所有文件。
    public void processResultsDirectory(String dirName) {
    File root = new File(dirName);
    try {
    Collection
    files = FileUtils.listFiles(root, new RegexFileFilter(jmeterJTLFileName), DirectoryFileFilter.DIRECTORY);
    for (Iterator
    iterator = files.iterator(); iterator.hasNext(); ) {
    File file = (File) iterator.next();
    parse(file);
    }
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
  • copyDirectory():复制整个目录。
    FileUtils.copyDirectory(source, dest);
  • forceDelete():强制删除文件或目录及其子目录。
    FileUtils.forceDelete(tmpFile);

3. StringUtils

类名org.apache.commons.lang3.StringUtils

简介

StringUtils 是一个操作字符串的工具类,支持 null 安全操作,适用于各种字符串处理场景。

常用方法

  • isBlank():判断字符串是否为空、全空格或 null。
    if (StringUtils.isBlank(name)) {
    throw new IllegalArgumentException("姓名不能为空");
    }
  • isNotBlank():与 isBlank() 检查结果相反。
  • isEmpty():判断字符串是否为空或 null。
    if (StringUtils.isEmpty(name)) {
    throw new IllegalArgumentException("姓名不能为 null 或者空字符串");
    }
  • isNotEmpty():与 isEmpty() 检查结果相反。
  • join():将多个对象连接成一个字符串。
    StringUtils.join(null) = null
    StringUtils.join([]) = ""
    StringUtils.join([null]) = ""
    StringUtils.join(["沉默", "王二"]) = "沉默王二"
  • equals():比较两个字符串是否相等。
    StringUtils.equals(null, null) = true
    StringUtils.equals(null, "沉默王二") = false
    StringUtils.equals("沉默王二", null) = false
    StringUtils.equals("沉默王二", "沉默王二") = true
  • split():将字符串拆分为数组,拆分符为空白字符。
    StringUtils.split(null) = null
    StringUtils.split("") = []
    StringUtils.split("沉默王二 沉默王三") = ["沉默王二", "沉默王三"]
  • replace():替换字符串中的所有匹配项。
    StringUtils.replace(null, *, *) = null
    StringUtils.replace("", *, *) = ""
    StringUtils.replace("any", null, *) = "any"
    StringUtils.replace("any", *, null) = "any"
    StringUtils.replace("any", "", *) = "any"

4. FilenameUtils

类名org.apache.commons.io.FilenameUtils

简介

FilenameUtils 用于操作文件名和路径,提供文件扩展名提取、路径拼接、文件名匹配等功能。

常用方法

  • getExtension():获取文件扩展名。
    FilenameUtils.getExtension("牛逼.txt") = "txt"
    FilenameUtils.getExtension("a/b/牛逼.jpg") = "jpg"
  • getBaseName():获取文件名或路径名。
    FilenameUtils.getBaseName("a/b/牛逼.txt") = "牛逼"
    FilenameUtils.getBaseName("牛逼.txt") = "牛逼"
  • getName():获取文件名和扩展名。
    FilenameUtils.getName("a/b/牛逼.txt") = "牛逼.txt"
  • concat():拼接路径和文件名。
    FilenameUtils.concat("/foo/", "bar") = "/foo/bar"
  • wildcardMatch():检查文件名是否匹配指定格式。
    wildcardMatch("c.txt", "*.txt") = true
    wildcardMatch("c.txt", "*.jpg") = false
  • separatorsToUnix():将路径分隔符转换为 Unix 格式。
    FilenameUtils.separatorsToUnix("my/unix/filename") = "my/unix/filename"
  • getFullPath():获取文件的完整路径。
    getFullPath("C:\a\b\c.txt") = "C:\a\b\c.txt"

5. ArrayUtils

类名org.apache.commons.lang3.ArrayUtils

简介

ArrayUtils 用于操作数组,提供元素添加、查找、克隆等功能,适用于数组处理。

常用方法

  • contains():检查数组是否包含指定值。
    public static boolean containsAll(Object[] one, Object[] two) {
    for (Object b : two) {
    if (!ArrayUtils.contains(one, b)) {
    return false;
    }
    }
    return true;
    }
  • addAll():将另一个数组的所有元素添加到当前数组。
    ArrayUtils.addAll(null, null) = null
    ArrayUtils.addAll(array1, null) = cloned copy of array1
  • clone():浅拷贝数组。
    public QualityGateTask[] getQueue() {
    return (QualityGateTask[]) ArrayUtils.clone(queue);
    }
  • isEmpty():判断数组是否为空。
    if (ArrayUtils.isEmpty(objectIds)) {
    throw new IllegalArgumentException("对象的ID不能为空");
    }
  • add():在数组中添加元素。
    ArrayUtils.add(null, true) = [true]
    ArrayUtils.add([true], false) = [true, false]
  • subarray():截取数组子数组。
    public byte[] fetchData(String blobKey, long startIndex, long l) {
    CountingInputStream inputStream = new CountingInputStream(getInputStream(blobKey));
    byte[] bytes = new byte[(int) l];
    try {
    int readSize = inputStream.read(bytes, (int) startIndex, (int) l);
    if (readSize < l) {
    bytes = ArrayUtils.subarray(bytes, 0, readSize - 1);
    }
    } catch (IOException e) {
    LOGGER.warn("Failed to read bytes", e);
    } finally {
    try {
    inputStream.close();
    } catch (IOException ignored) {
    LOGGER.warn("Exception while closing inputStream", ignored);
    }
    }
    return bytes;
    }
  • indexOf():查找数组中的指定元素。
    ArrayUtils.indexOf(idxVal, i);

6. DigestUtils

类名org.apache.commons.codec.digest.DigestUtils

简介

DigestUtils 提供了常用加密算法的工具类,支持 MD5、SHA-1 等算法。

常用方法

  • md5Hex():计算 MD5 摘要并返回十六进制字符串。
    DigestUtils.md5Hex("沉默王二");
  • md5():返回 MD5 字节数组。
    DigestUtils.md5("沉默王二");

7. StringEscapeUtils

类名org.apache.commons.text.StringEscapeUtils

简介

StringEscapeUtils 用于字符串的 HTML 转义和反转义,支持 HTML4 和 XML 转义。

常用方法

  • unescapeHtml4():反转义 HTML。
    StringEscapeUtils.unescapeHtml4("<div></div>") = "
    "
  • escapeHtml4():转义 HTML。
    StringEscapeUtils.escapeHtml4("
    ") = "<div></div>"
  • escapeJava():转义 Java 特殊字符。
    StringEscapeUtils.escapeJava("沉默王二") = "\u6C89\u9ED8\u738B\u4E8C"
  • unescapeJava():反转义 Java 转义字符。
    StringEscapeUtils.unescapeJava("\u6C89\u9ED8\u738B\u4E8C") = "沉默王二"

8. BeanUtils

类名org.apache.commons.beanutils.BeanUtils

简介

BeanUtils 用于动态获取和设置 JavaBean 的属性值,适用于对象属性的灵活操作。

常用方法

  • copyProperties():拷贝对象的属性。
    private static void dto2Entity() {
    UserDTO user = new UserDTO();
    user.setId(1L);
    user.setUsername("joking");
    user.setCreationDate("2016-04-20");
    EUser u = new EUser();
    ConvertUtils.register(new DateStringConverter(), Date.class);
    try {
    BeanUtils.copyProperties(u, user);
    } catch (IllegalAccessException | InvocationTargetException e) {
    e.printStackTrace();
    }
    }
  • getProperty():获取对象属性值。
    String fieldValue = BeanUtils.getProperty(value, fieldName);
  • setProperty():设置对象属性值。
    BeanUtils.setProperty(object, propertyName, value);

通过这些工具类和方法,开发者可以显著提升代码的可读性和 maintainability,减少重复代码,同时提高工作效率。希望这篇文章能为大家提供有价值的参考,助力 Java 开发事业!

上一篇:为什么我不建议你通过 Python 去找工作?
下一篇:大话测试六技——让测试不要太容易

发表评论

最新留言

感谢大佬
[***.8.128.20]2026年06月19日 12时14分27秒