当前位置: 首页 > news >正文

Apache Commons Lang3 和 Commons Net 详解

目录

1. Apache Commons Lang3

1.1 什么是 Apache Commons Lang3?

1.2 主要功能

1.3 示例代码

2. Commons Net

2.1 什么是 Commons Net?

2.2 主要功能

2.3 示例代码

3. 总结

3.1 Apache Commons Lang3

3.2 Commons Net

3.3 使用建议

4. 参考资料


前言

        在 Java 开发中,Apache Commons 项目提供了许多实用的工具库,帮助开发者更高效地完成日常开发任务。本文将深入解析 Apache Commons Lang3Commons Net 这两个库的作用、技术细节以及实际应用,并通过示例代码演示它们的使用方法。


1. Apache Commons Lang3

1.1 什么是 Apache Commons Lang3?

Apache Commons Lang3 是 Apache Commons 项目中的一个工具库,提供了许多与 Java 核心类库相关的扩展功能,例如字符串处理、日期操作、对象工具等。它是 Java 开发中常用的工具库之一。

1.2 主要功能

  • 字符串处理:提供了丰富的字符串操作方法,如 StringUtils
  • 对象工具:提供了对象操作的工具类,如 ObjectUtils
  • 日期操作:提供了日期格式化和解析的工具类,如 DateUtils
  • 随机数生成:提供了随机数生成工具类,如 RandomUtils
  • 异常处理:提供了异常处理工具类,如 ExceptionUtils

1.3 示例代码

以下是一些常用的 StringUtilsDateUtils 示例:

字符串处理:

import org.apache.commons.lang3.StringUtils;public class StringUtilsExample {public static void main(String[] args) {// 判断字符串是否为空boolean isEmpty = StringUtils.isEmpty(""); // trueboolean isBlank = StringUtils.isBlank("  "); // true// 字符串截取String substring = StringUtils.substring("Hello World", 6); // "World"// 字符串拼接String join = StringUtils.join(new String[]{"Hello", "World"}, ", "); // "Hello, World"System.out.println("isEmpty: " + isEmpty);System.out.println("isBlank: " + isBlank);System.out.println("substring: " + substring);System.out.println("join: " + join);}
}

日期操作:

import org.apache.commons.lang3.time.DateUtils;import java.text.ParseException;
import java.util.Date;public class DateUtilsExample {public static void main(String[] args) throws ParseException {// 解析日期Date date = DateUtils.parseDate("2023-10-15", "yyyy-MM-dd");// 添加天数Date newDate = DateUtils.addDays(date, 10);// 判断是否为同一天boolean isSameDay = DateUtils.isSameDay(date, newDate); // falseSystem.out.println("date: " + date);System.out.println("newDate: " + newDate);System.out.println("isSameDay: " + isSameDay);}
}

NumberUtils

import org.apache.commons.lang3.math.NumberUtils;public class NumberUtilsExample {public static void main(String[] args) {// 判断字符串是否为数字System.out.println(NumberUtils.isCreatable("123")); // trueSystem.out.println(NumberUtils.isCreatable("12.3")); // trueSystem.out.println(NumberUtils.isCreatable("abc")); // false// 获取最大值int max = NumberUtils.max(1, 2, 3);System.out.println("Max: " + max); // 3// 转换字符串为数字int number = NumberUtils.toInt("123", 0);System.out.println("Number: " + number); // 123}
}

ObjectUtils

import org.apache.commons.lang3.ObjectUtils;public class ObjectUtilsExample {public static void main(String[] args) {// 获取非空对象String result = ObjectUtils.firstNonNull(null, "default", "fallback");System.out.println(result); // "default"// 比较对象int comparison = ObjectUtils.compare("a", "b");System.out.println(comparison); // -1// 克隆对象MyObject original = new MyObject("data");MyObject clone = ObjectUtils.clone(original);System.out.println(clone.getData()); // "data"}
}class MyObject implements Cloneable {private String data;public MyObject(String data) {this.data = data;}public String getData() {return data;}@Overrideprotected MyObject clone() {return new MyObject(this.data);}
}

2. Commons Net

2.1 什么是 Commons Net?

Commons Net 是 Apache Commons 项目中的一个网络工具库,提供了许多与网络协议相关的实现,例如 FTP、SMTP、POP3 等。它简化了网络编程的复杂性,帮助开发者快速实现网络功能。

2.2 主要功能

  • FTP 客户端:提供了 FTP 客户端的实现,支持文件上传、下载等操作。
  • SMTP 客户端:提供了 SMTP 客户端的实现,支持邮件发送。
  • POP3 客户端:提供了 POP3 客户端的实现,支持邮件接收。
  • Telnet 客户端:提供了 Telnet 客户端的实现,支持远程登录。

2.3 示例代码

以下是使用 FTPClient 进行文件上传和下载的示例:

FTP 文件上传:

import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;public class FtpUploadExample {public static void main(String[] args) {FTPClient ftpClient = new FTPClient();try {// 连接 FTP 服务器ftpClient.connect("ftp.example.com", 21);ftpClient.login("username", "password");// 设置文件类型为二进制ftpClient.setFileType(FTP.BINARY_FILE_TYPE);// 上传文件File file = new File("local-file.txt");FileInputStream inputStream = new FileInputStream(file);boolean success = ftpClient.storeFile("remote-file.txt", inputStream);inputStream.close();if (success) {System.out.println("文件上传成功!");}} catch (IOException e) {e.printStackTrace();} finally {try {ftpClient.logout();ftpClient.disconnect();} catch (IOException e) {e.printStackTrace();}}}
}

FTP 文件下载:

import org.apache.commons.net.ftp.FTPClient;import java.io.FileOutputStream;
import java.io.IOException;public class FtpDownloadExample {public static void main(String[] args) {FTPClient ftpClient = new FTPClient();try {// 连接 FTP 服务器ftpClient.connect("ftp.example.com", 21);ftpClient.login("username", "password");// 下载文件FileOutputStream outputStream = new FileOutputStream("local-file.txt");boolean success = ftpClient.retrieveFile("remote-file.txt", outputStream);outputStream.close();if (success) {System.out.println("文件下载成功!");}} catch (IOException e) {e.printStackTrace();} finally {try {ftpClient.logout();ftpClient.disconnect();} catch (IOException e) {e.printStackTrace();}}}
}

3. 总结

3.1 Apache Commons Lang3

  • 优点:提供了丰富的工具类,简化了 Java 开发中的常见操作。
  • 适用场景:字符串处理、日期操作、对象工具等。

3.2 Commons Net

  • 优点:提供了多种网络协议的实现,简化了网络编程的复杂性。
  • 适用场景:FTP 文件传输、邮件发送与接收、远程登录等。

3.3 使用建议

  • Apache Commons Lang3:适合在需要处理字符串、日期、对象等场景中使用。
  • Commons Net:适合在需要实现网络功能(如 FTP、SMTP、POP3 等)的场景中使用。

4. 参考资料

  • Apache Commons Lang3 官方文档
  • Commons Net 官方文档
  • Apache Commons 项目主页

相关文章:

Apache Commons Lang3 和 Commons Net 详解

目录 1. Apache Commons Lang3 1.1 什么是 Apache Commons Lang3? 1.2 主要功能 1.3 示例代码 2. Commons Net 2.1 什么是 Commons Net? 2.2 主要功能 2.3 示例代码 3. 总结 3.1 Apache Commons Lang3 3.2 Commons Net 3.3 使用建议 4. 参考…...

从0开始的操作系统手搓教程33:挂载我们的文件系统

目录 代码实现 添加到初始化上 上电看现象 挂载分区可能是一些朋友不理解的——实际上挂载就是将我们的文件系统封装好了的设备(硬盘啊,SD卡啊,U盘啊等等),挂到我们的默认分区路径下。这样我们就能访问到了&#xff…...

【Linux】36.简单的TCP网络程序

文章目录 1. TCP socket API 详解1.1 socket():打开一个网络通讯端口1.2 bind():绑定一个固定的网络地址和端口号1.3 listen():声明sockfd处于监听状态1.4 accept():接受连接1.5 connect():连接服务器 2. 实现一个TCP网络服务器2.1 Log.hpp - "多级日志系统"2.2 Daem…...

时序分析

1、基本概念介绍 1.1、 建立时间 T(su) 建立时间:setup time,它是指有效的边沿信号到来之前,输入端口数据保持稳定的时间。 1.1.1、 建立时间要求: 建立时间要求指的是 想要寄存器如期的工作,在有效时…...

doris:ClickHouse

Doris JDBC Catalog 支持通过标准 JDBC 接口连接 ClickHouse 数据库。本文档介绍如何配置 ClickHouse 数据库连接。 使用须知​ 要连接到 ClickHouse 数据库,您需要 ClickHouse 23.x 或更高版本 (低于此版本未经充分测试)。 ClickHouse 数据库的 JDBC 驱动程序&a…...

NLP常见任务专题介绍(1)-关系抽取(Relation Extraction, RE)任务训练模板

📌 关系抽取(Relation Extraction, RE)任务训练示例 本示例展示如何训练一个关系抽取模型,以识别两个实体之间的关系。 1️⃣ 任务描述 目标:从文本中提取两个实体之间的语义关系,例如 “人物 - 组织”、“药物 - 疾病”、“公司 - 创始人” 等。输入:句子 + 标注的实…...

大模型Transformer的MOE架构介绍及方案整理

前言:DeepSeek模型最近引起了NLP领域的极大关注,也让大家进一步对MOE(混合专家网络)架构提起了信心,借此机会整理下MOE的简单知识和对应的大模型。本文的思路是MOE的起源介绍、原理解释、再到现有MOE大模型的整理。 一…...

零基础掌握Linux SCP命令:5分钟实现高效文件传输,小白必看!

引言 “为什么我传个文件到服务器要折腾半小时?” 如果你也曾在Linux系统中为文件传输抓狂,今天这篇保姆级教程就是你的救星!SCP命令——一个基于SSH协议的高效传输工具,只需5分钟,彻底告别FTP客户端和繁琐操作&#…...

分类评价指标

基础概念解释 TP、TN、FP、FN 这里T是True,F是False,P为Positive,N为Negative TP:被模型正确地预测为正样本(原本为正样本,预测为正样本) TN:被模型正确地预测为负样本&#xff0…...

Python项目-基于Django的在线教育平台开发

1. 项目概述 在线教育平台已成为现代教育的重要组成部分,特别是在后疫情时代,远程学习的需求显著增加。本文将详细介绍如何使用Python的Django框架开发一个功能完善的在线教育平台,包括系统设计、核心功能实现以及部署上线等关键环节。 本项…...

子数组问题——动态规划

个人主页:敲上瘾-CSDN博客 动态规划 基础dp:基础dp——动态规划-CSDN博客多状态dp:多状态dp——动态规划-CSDN博客 目录 一、解题技巧 二、最大子数组和 三、乘积最大子数组 四、最长湍流子数组 五、单词拆分 一、解题技巧 区分子数组&…...

linux设置pem免密登录和密码登录

其实现在chatgpt 上面很多东西问题都可以找到比较好答案了,最近换了一个服务器,记录一下。 如果设置root用户,就直接切换到cd .ssh目录下生成ssh key即可,不需要创建用户创建用户的ssh文件夹了 比如说我要让danny这个用户可以用p…...

什么是Flask

Flask是Python中一个简单、灵活和易用的Web框架,适合初学者使用。它提供了丰富的功能和扩展性,可以帮助开发者快速构建功能完善的Web应用程序。 以下是Python Flask框架的一些特点和功能: Flask 是一个使用 Python 编写的轻量级 WSGI 微 Web…...

Spark(8)配置Hadoop集群环境-使用脚本命令实现集群文件同步

一.hadoop的运行模式 二.scp命令————基本使用 三.scp命令———拓展使用 四.rsync远程同步 五.xsync脚本集群之间的同步 一.hadoop的运行模式 hadoop一共有如下三种运行方式: 1. 本地运行。数据存储在linux本地,测试偶尔用一下。我们上一节课使用…...

【cocos creator】热更新

一、介绍 试了官方的热更新功能,总结一下 主要用于安卓包热更新 参考: Cocos Creator 2.2.2 热更新简易教程 基于cocos creator2.4.x的热更笔记 二、使用软件 1、cocos creator v2.4.10 2、creator热更新插件:热更新manifest生成工具&…...

黑金风格人像静物户外旅拍Lr调色教程,手机滤镜PS+Lightroom预设下载!

调色教程 针对人像、静物以及户外旅拍照片,运用 Lightroom 软件进行风格化调色工作。旨在通过软件中的多种工具,如基本参数调整、HSL(色相、饱和度、明亮度)调整、曲线工具等改变照片原本的色彩、明度、对比度等属性,将…...

部署vue+django项目(初版)

1.准备 vscode 插件Remote SSH,连接远程,打开远程中home文件夹。 镜像和容器的一些常用命令 docker images docker ps 查看所有正在运行的容器 docker ps -a docker rmi -f tk-django-app 删除镜像 docker rm xxx 删除容器 docker start xxxx …...

Redis7系列:设置开机自启

前面的文章讲了Redis和Redis Stack的安装,随着服务器的重启,导致Redis 客户端无法连接。原来的是Redis没有配置开机自启。此文记录一下如何配置开机自启。 1、修改配置文件 前面的Redis和Redis Stack的安装的文章中已经讲了redis.config的配置&#xf…...

HarmonyOS学习第18天:多媒体功能全解析

一、开篇引入 在当今数字化时代,多媒体已经深度融入我们的日常生活。无论是在工作中通过视频会议进行沟通协作,还是在学习时借助在线课程的音频讲解加深理解,亦或是在休闲时光用手机播放音乐放松身心、观看视频打发时间,多媒体功…...

在rocklinux里面批量部署安装rocklinx9

部署三台Rockylinux9服务器 实验要求 1. 自动安装ubuntu server20以上版本 2. 自动部署三台Rockylinux9服务器,最小化安装,安装基础包,并设定国内源,设静态IP 实验步骤 安装软件 # yum源必须有epel源 # dnf install -y epel-re…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

龙虎榜——20250610

上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...

web vue 项目 Docker化部署

Web 项目 Docker 化部署详细教程 目录 Web 项目 Docker 化部署概述Dockerfile 详解 构建阶段生产阶段 构建和运行 Docker 镜像 1. Web 项目 Docker 化部署概述 Docker 化部署的主要步骤分为以下几个阶段: 构建阶段(Build Stage)&#xff1a…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列,以便知晓哪些列包含有价值的数据,…...

九天毕昇深度学习平台 | 如何安装库?

pip install 库名 -i https://pypi.tuna.tsinghua.edu.cn/simple --user 举个例子: 报错 ModuleNotFoundError: No module named torch 那么我需要安装 torch pip install torch -i https://pypi.tuna.tsinghua.edu.cn/simple --user pip install 库名&#x…...

Java毕业设计:WML信息查询与后端信息发布系统开发

JAVAWML信息查询与后端信息发布系统实现 一、系统概述 本系统基于Java和WML(无线标记语言)技术开发,实现了移动设备上的信息查询与后端信息发布功能。系统采用B/S架构,服务器端使用Java Servlet处理请求,数据库采用MySQL存储信息&#xff0…...

MySQL JOIN 表过多的优化思路

当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...

Python Einops库:深度学习中的张量操作革命

Einops(爱因斯坦操作库)就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库,用类似自然语言的表达式替代了晦涩的API调用,彻底改变了深度学习工程…...

android13 app的触摸问题定位分析流程

一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...