概述
网络编程Java库,广泛用于实现与多种网络协议的交互,如FTP、SMTP、POP3、IMAP、NNTP和Telnet等。
maven依赖
<!-- https://mvnrepository.com/artifact/commons-net/commons-net --><dependency><groupId>commons-net</groupId><artifactId>commons-net</artifactId><version>3.12.0</version></dependency>
示例
FTPClient ftpClient = new FTPClient();
ftpClient.connect("ftp.example.com", 21); // 连接到FTP服务器
ftpClient.login("username", "password"); // 登录验证
ftpClient.enterLocalPassiveMode(); // 使用被动模式传输文件
FTPFile[] files = ftpClient.listFiles(); // 列出当前目录下的文件
for (FTPFile file : files) {
System.out.println(file.getName()); // 打印文件名
}
ftpClient.makeDirectory("/newdir"); // 创建新目录
ftpClient.deleteFile("/path/to/file.txt"); // 删除文件
if (ftpClient.isConnected()) {
ftpClient.logout(); // 退出登录
ftpClient.disconnect(); // 断开服务器连接
}
常用API
客户端相关
- 可用客户端
| 客户端 | 说明 |
|---|---|
| FTPClient | FTP协议 TCP客户端,支持文件上传、下载等操作。 |
| FTPSClient | FTPS协议 TCP客户端,通过 SSL/TLS 加密传输。 |
| FTPHTTPClient | 同时支持FTP协议和HTTP协议TCP客户端,用于同时处理文件传输和网页访问的场景 |
| IMAPClient | IMAP协议 TCP客户端, 支持从邮件服务器上直接访问和管理邮件,支持邮件文件夹和实时同步功能。 |
| IMAPSClient | IMAPS协议 TCP客户端,通过 SSL/TLS 加密传输。 |
| AuthenticatingIMAPClient | IMAP协议 协议身份验证TCP客户端 |
| SMTPClient | SMTP协议 TCP客户端,支持邮件发送。 |
| SMTPSClient | SMTPS协议 TCP客户端,通过 SSL/TLS 加密传输。 |
| AuthenticatingSMTPClient | SMTP协议 协议身份验证TCP客户端 |
| POP3Client | POP3协议 TCP客户端,支持邮件接收。 |
| POP3SClient | POP3S协议 TCP客户端,通过 SSL/TLS 加密传输。 |
| ExtendedPOP3Client | POP3协议扩展的TCP客户端,实现更复杂的邮件传输功能 |
| TelnetClient | Telnet协议 TCP客户端,支持远程登录。 |
| NNTPClient | NNTP协议 TCP客户端,支持网络新闻传送协议 |
| RExecClient | RExec协议TCP客户端,支持远程执行命令功能 |
| RCommandClient | RCommand协议TCP客户端,支持客户端和服务器之间建立连接。 |
| RLoginClient | RLogin协议TCP客户端,网络远程登录另一台计算机 |
| DiscardTCPClient | RFC863协议的TCP客户端,支持发送数据到服务器并接收服务器响应 |
| EchoTCPClient | TCP连接测试客户端,支持验证TCP 服务器是否在指定端口上运行,并且能够正确响应客户端的连接请求。 |
| CharGenTCPClient | RFC864 字符生成器协议TCP客户端,用于网络设备测试和调试。 |
| DaytimeTCPClient | 时间协议TCP客户端,支持获取服务器的日期和时间。 |
| TimeTCPClient | 时间协议TCP客户端,支持获取服务器的日期时间信息。 |
| FingerClient | Finger协议客户端,用于查询远程主机信息。 |
| WhoisClient | Whois协议客户端,用于查询域名及IP地址注册信息, |
| CharGenUDPClient | RFC864 字符生成器协议UDP客户端,用于网络设备测试和调试。 |
| DaytimeUDPClient | 时间协议UDP客户端,支持获取服务器的日期和时间。 |
| TimeUDPClient | 时间协议UDP客户端,支持获取服务器的日期时间信息。 |
| DiscardUDPClient | RFC863协议的UDP客户端,支持发送数据到服务器并接收服务器响应 |
| EchoUDPClient | UDP连接测试客户端,支持验证UDP 服务器是否在指定端口上运行,并且能够正确响应客户端的连接请求。 |
| NTPUDPClient | NTP协议UDP客户端,用于从时间服务器获取准确的时间信息 |
| TFTPClient | TFTP协议UDP客户端,用于文件下载或固件升级等场景。 |
- SocketClient(所有客户端的抽象父类)
| 客户端 | 说明 |
|---|---|
| addProtocolCommandListener(ProtocolCommandListener listener) removeProtocolCommandListener(ProtocolCommandListener listener) | 实现监听和调试网络协议的命令和响应。 |
| connect(InetAddress host) connect(InetAddress host, int port) connect(InetAddress host, int port, InetAddress localAddr, int localPort) connect(String hostname) connect(String hostname, int port) connect(String hostname, int port, InetAddress localAddr, int localPort) | 配置连接服务器的地址 |
| disconnect() | 断开连接 |
| getCharset() setCharset(Charset charset) | 获取或配置字符集 |
| getConnectTimeout() setConnectTimeout(int connectTimeout) | 获取或配置连接超时时间 |
| getDefaultPort() setDefaultPort(int port) | 获取或设置默认端口号 |
| getDefaultTimeout() setDefaultTimeout(int timeout) | 获取或设置默认超时时间 |
| getKeepAlive() setKeepAlive(boolean keepAlive) | 获取或配置是否保持长时间的网络连接 |
| getLocalAddress() | 获取本地地址 |
| getLocalPort() | 获取本地端口号 |
| getProxy() setProxy(Proxy proxy) | 获取或配置代理对象 |
| getRemoteAddress() | 获取远程地址 |
| getRemotePort() | 获取远程端口号 |
| getServerSocketFactory() setServerSocketFactory(ServerSocketFactory factory) | 获取或设置ServerSocketFactory |
| getSoLinger() setSoLinger(boolean on, int val) | 获取或设置Socket连接的关闭行为。on为true时,表示延迟val秒关闭;on为false时,等待数据发送完毕后再正常关闭Socket |
| getSoTimeout() setSoTimeout(int timeout) | 获取或设置输入/输出流操作的超时时间 |
| getTcpNoDelay() setTcpNoDelay(boolean on) | 获取或设置Tcp连接是否无延迟 |
| isAvailable() | 判断连接是否是可用的 |
| isConnected() | 判断连接是否是否连接成功 |
| setReceiveBufferSize(int size) | 配置接收缓冲区大小 |
| setSendBufferSize(int size) | 配置发生缓冲区大小 |
| setSocketFactory(SocketFactory factory) | 设置Socket工厂 |
| verifyRemote(Socket socket) | 远程验证连接 |
- FTPClient
| 客户端 | 说明 |
|---|---|
| FTPClient() | 构造方法 |
| abort() | 放弃当前的数据传输 |
| allocate(int bytes) allocate(int bytes, int recordSize) allocate(long bytes) allocate(long bytes, int recordSize) | 分配指定数量字节的文件空间。 |
| appendFile(String remote, InputStream local) | 向一个已经存在的文件追加内容 |
| appendFileStream(String remote) | 通过输出流向一个已经存在的文件追加内容 |
| changeToParentDirectory() | 切换当前目录到父目录 |
| changeWorkingDirectory(String path) | 切换工作目录 |
| completePendingCommand() | 检查上一个命令是否已经成功完成 |
| configure(FTPClientConfig ftpClientConfig) | 设置 FTP客户端配置 |
| deleteFile(String path) | 删除文件 |
| disconnect() | 断开网络连接 |
| doCommand(String command, String params) | 发送一个 FTP 命令到服务器 |
| doCommandAsStrings(String command, String params) | 发送一个 FTP 命令到服务器,并获取命令执行后的响应作为字符串数组。 |
| enterLocalActiveMode() | 使用本地主动模式 |
| enterLocalPassiveMode() | 使用本地被动模式 |
| enterRemoteActiveMode(InetAddress host, int port) | 使用远程主动模式 |
| enterRemotePassiveMode() | 使用远程被动模式 |
| features() | 判断是否支持服务器功能 |
| featureValue(String feature) | 获取服务器功能 |
| featureValues(String feature) | 获取服务器功能数组 |
| getAutodetectUTF8() setAutodetectUTF8(boolean autoDetectEncoding) | 获取或设置自动检测编码 |
| getBufferSize() setBufferSize(int bufferSize) | 获取或设置缓存大小 |
| getControlKeepAliveReplyTimeoutDuration() setControlKeepAliveReplyTimeout(Duration timeout) | 设置控制连接(通常是与 FTP 服务器的命令通道)在空闲状态下保持活跃的超时时间。 |
| getControlKeepAliveTimeoutDuration() setControlKeepAliveTimeout(Duration controlIdle) | 指定空闲连接在被服务器关闭之前可以保持活跃的最长时间。 |
| getCopyStreamListener() setCopyStreamListener(CopyStreamListener copyStreamListener) | 获取或设置监听器,用来监听文件传输过程中的进度, |
| getDataConnectionMode() | 获取数据连接模式 |
| getDataTimeout() setDataTimeout(Duration timeout) | 获取或设置数据超时时间 |
| getListHiddenFiles() setListHiddenFiles(boolean listHiddenFiles) | 获取或设置是否列出隐藏文件 |
| getModificationTime(String path) setModificationTime(String path, String timeval) | 获取或修改文件最后修改时间 |
| getPassiveHost() | 获取被动连接的IP地址 |
| getPassiveLocalIPAddress() setPassiveLocalIPAddress(InetAddress passiveLocalHost) setPassiveLocalIPAddress(String ipAddress) | 获取或配置本地被动模式下的IP地址 |
| getPassivePort() | 获取被动连接的端口号 |
| getSendDataSocketBufferSize() setSendDataSocketBufferSize(int sendDataSocketBufferSize) | 获取或设置发送数据的缓冲区大小。 |
| getReceiveDataSocketBufferSize() setReceieveDataSocketBufferSize(int receiveDataSocketBufferSize) | 获取或设置接受数据的缓冲区大小 |
| getRestartOffset() setRestartOffset(long offset) | 获取或设置重启偏移量 |
| getSize(String path) | 获取文件大小 |
| getStatus() getStatus(String path) | 获取文件状态 |
| getSystemType() 获取系统类型 | |
| getSystemTypeOverride() | 获取覆盖的系统类型 |
| hasFeature(FTPCmd feature) hasFeature(String feature) hasFeature(String feature, String value) | 判断是否有指定的功能 |
| initiateListParsing() initiateListParsing(String path) initiateListParsing(String parserKey, String path) | 初始化解析过程 |
| initiateMListParsing() initiateMListParsing(String path) | |
| isIpAddressFromPasvResponse() setIpAddressFromPasvResponse(boolean ipAddressFromPasvResponse) | |
| isRemoteVerificationEnabled() setRemoteVerificationEnabled(boolean remoteVerificationEnabled) | |
| isUseEPSVwithIPv4() setUseEPSVwithIPv4(boolean useEPSVwithIPv4) | |
| listDirectories() listDirectories(String parent) | 列出当前目录下的文件夹 |
| listFiles() listFiles(String path) listFiles(String path, FTPFileFilter filter) | 列出当前目录下的文件 |
| listHelp() listHelp(String command) | 获取系统帮助信息并返回完整的字符串。 |
| listNames() listNames(String path) | 列出当前目录下的文件名 |
| login(String user, String password) login(String user, String password, String account) | 使用提供的用户名和密码登录到FTP服务器。 |
| logout() | 退出FTP服务器 |
| makeDirectory(String path) | 创建一个FTP服务器的当前目录的子目录 |
| mdtmCalendar(String path) | |
| mdtmInstant(String path) | |
| mlistDir() mlistDir(String path) mlistDir(String path, FTPFileFilter filter) | |
| mlistFile(String path) | |
| printWorkingDirectory() | 返回当前工作目录的路径名。 |
| reinitialize() | 初始化 |
| remoteAppend(String fileName) | |
| remoteRetrieve(String fileName) | |
| remoteStore(String fileName) | |
| remoteStoreUnique() remoteStoreUnique(String fileName) | |
| removeDirectory(String path) | 移除文件夹 |
| rename(String from, String to) | 文件重命名 |
| retrieveFile(String remote, OutputStream local) | 下载文件 |
| retrieveFileStream(String remote) | 下载文件 |
| storeFile(String remote, InputStream local) | 文件上传 |
| storeFileStream(String remote) | 文件上传 |
| storeUniqueFile(InputStream local) storeUniqueFile(String remote, InputStream local) storeUniqueFileStream() storeUniqueFileStream(String remote) | 文件上传 |
| sendNoOp() | 发送一个NOOP命令到FTP服务器。 |
| sendSiteCommand(String arguments) | 发送一个站点特定的命令。 |
| setActiveExternalIPAddress(String ipAddress) | 设置在主动模式下的外部IP地址。 |
| setActivePortRange(int activeMinPort, int activeMaxPort) | 客户端设置在主动模式端口范围。 |
| setFileStructure(int fileStructure) | 设置文件的结构。 |
| setFileTransferMode(int fileTransferMode) | 设置传输模式。 |
| setFileType(int fileType) setFileType(int fileType, int formatOrByteSize) | 设置文件类型和格式传送 |
| setParserFactory(FTPFileEntryParserFactory parserFactory) | 配置解析工厂类 |
| setPassiveNatWorkaroundStrategy(HostnameResolver passiveNatWorkaroundStrategy) | |
| setReportActiveExternalIPAddress(String ipAddress) | |
| structureMount(String path) |
