如何用Java代码实现FTP链接服务器?Java连接FTP服务器代码示例

在 Java 中连接 FTP 服务器,最常用且推荐的方式是使用 Apache Commons Net 库,它提供了稳定、易于使用的 API 来处理 FTP、FTPS 和 SFTP 协议。

下面我将提供两种常见场景的代码示例:

Java小案例 - 网络编程 - 实现简单的客户端与服务器端连接传输
加载中
Java小案例 - 网络编程 - 实现简单的客户端与服务器端连接传输
  1. 标准 FTP 连接(明文传输,端口 21)
  2. FTPS 连接(加密传输,推荐用于生产环境)

✅ 前置依赖

如果你使用 Maven,请在 pom.xml 中添加以下依赖:

<dependency>
    <groupId>commons-net</groupId>
    <artifactId>commons-net</artifactId>
    <version>3.9.0</version> <!-- 请使用最新版本 -->
</dependency>

⚠️ 注意:Apache Commons Net 不直接支持 SFTP(SSH File Transfer Protocol),SFTP 需要使用 JSch 或 Apache Commons VFS 等库,本文聚焦于 FTP/FTPS。


📌 示例 1:标准 FTP 连接(非加密)

import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
import java.io.IOException;
public class FtpExample {
    public static void main(String[] args) {
        String host = "ftp.example.com";
        int port = 21;
        String username = "your_username";
        String password = "your_password";
        FTPClient ftpClient = new FTPClient();
        try {
            // 连接服务器
            ftpClient.connect(host, port);
            System.out.println("Connected to " + host);
            // 登录
            boolean loginSuccess = ftpClient.login(username, password);
            if (!loginSuccess) {
                System.out.println("Login failed!");
                return;
            }
            System.out.println("Logged in successfully.");
            // 检查响应码
            int reply = ftpClient.getReplyCode();
            if (!FTPReply.isPositiveCompletion(reply)) {
                ftpClient.disconnect();
                System.err.println("Server refused connection.");
                return;
            }
            // 设置被动模式(推荐,尤其通过防火墙/NAT 时)
            ftpClient.enterLocalPassiveMode();
            // 设置文件类型为二进

如何用Java代码实现FTP链接服务器?Java连接FTP服务器代码示例

制(避免文件损坏) ftpClient.setFileType(FTP.BINARY_FILE_TYPE); // 示例:列出根目录文件 String[] files = ftpClient.listNames(); if (files != null) { for (String file : files) { System.out.println("File: " + file); } } // 断开连接 ftpClient.logout(); System.out.println("Disconnected."); } catch (IOException e) { e.printStackTrace(); } finally { if (ftpClient.isConnected()) { try { ftpClient.disconnect(); } catch (IOException ex) { ex.printStackTrace(); } } } } }

🔒 示例 2:FTPS 连接(显式 SSL/TLS 加密)

FTPS 是 FTP over SSL,更安全,使用 FTPClient 并启用 SSL 即可。

import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManagerFactory;
import java.io.FileInputStream;
import java.io.IOException;
import java.security.KeyStore;
import java.security.Security;
public class FtpsExample {
    public static void main(String[] args) {
        String host = "ftps.example.com";
        int port = 990; // 或 21(显式模式)
        String username = "your_username";
        String password = "your_password";
        FTPClient ftpClient = new FTPClient();
        try {
            // 可选:配置 SSL 上下文(如需要自定义信任库)
            // SSLContext sslContext = createSSLContext();
            // ftpClient.execPBSZ(0);
            // ftpClient.execPROT("P");
            // ftpClient.setAuthSSL(sslContext);
            // 连接(显式 FTPS,端口通常为 21)
            ftpClient.connect(host, port);
            System.out.println("Connected to " + host);
            // 登录
            boolean loginSuccess = ftpClient.login(username, password);
            if (!loginSuccess) {
                System.out.println("Login failed!");
                return;
            }
            System.out.println("Logged in successfully.");
            int reply = ftpClient.getReplyCode();
            if (!FTPReply

如何用Java代码实现FTP链接服务器?Java连接FTP服务器代码示例

.isPositiveCompletion(reply)) { ftpClient.disconnect(); System.err.println("Server refused connection."); return; } // 启用显式 FTPS(自动处理 SSL 握手) ftpClient.execPBSZ(0); ftpClient.execPROT("P"); // 数据通道也加密 // 被动模式 ftpClient.enterLocalPassiveMode(); // 二进制模式 ftpClient.setFileType(FTP.BINARY_FILE_TYPE); // 示例:列出文件 String[] files = ftpClient.listNames(); if (files != null) { for (String file : files) { System.out.println("File: " + file); } } ftpClient.logout(); System.out.println("Disconnected."); } catch (IOException e) { e.printStackTrace(); } finally { if (ftpClient.isConnected()) { try { ftpClient.disconnect(); } catch (IOException ex) { ex.printStackTrace(); } } } } // 如需自定义信任库,可取消注释并实现此方法 / private static SSLContext createSSLContext() throws Exception { KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType()); try (FileInputStream fis = new FileInputStream("truststore.jks")) { trustStore.load(fis, "changeit".toCharArray()); } TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); tmf.init(trustStore); SSLContext sslContext = SSLContext.getInstance("TLS"); sslContext.init(null, tmf.getTrustManagers(), null); return sslContext; } / }

📤 上传/下载文件示例

上传文件

import java.io.FileInputStream;
import java.io.IOException;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
public boolean uploadFile(FTPClient ftpClient, String remotePath, String localFilePath) throws IOException {
    try (FileInputStream inputStream = new FileInputStream(localFilePath)) {
        boolean success = ftpClient.storeFile(remotePath, inputStream);
        if (success) {
            System.out.println("File uploaded successfully: " + remotePath);
        } else {
            System.out.println("Upload failed for: " + remotePath);
        }
        return success;
    }
}

如何用Java代码实现FTP链接服务器?Java连接FTP服务器代码示例

下载文件

import java.io.FileOutputStream;
import java.io.IOException;
import org.apache.commons.net.ftp.FTPClient;
public boolean downloadFile(FTPClient ftpClient, String remoteFilePath, String localFilePath) throws IOException {
    try (FileOutputStream outputStream = new FileOutputStream(localFilePath)) {
        boolean success = ftpClient.retrieveFile(remoteFilePath, outputStream);
        if (success) {
            System.out.println("File downloaded successfully: " + remoteFilePath);
        } else {
            System.out.println("Download failed for: " + remoteFilePath);
        }
        return success;
    }
}

⚠️ 注意事项

  1. 被动模式(Passive Mode):始终调用 ftpClient.enterLocalPassiveMode(),否则在 NAT/防火墙后可能无法传输数据。
  2. 字符编码:如果文件名包含中文,需设置编码:
    ftpClient.setControlEncoding("UTF-8");
  3. 资源关闭:务必在 finally 块中关闭 FTPClient 和输入/输出流,避免资源泄漏。
  4. FTPS vs SFTP:
  5. 超时设置:可设置连接和数据超时:
    ftpClient.setConnectTimeout(5000); // 5秒
    ftpClient.setDataTimeout(30000);   // 30秒

协议 库 是否加密 推荐场景
FTP commons-net 内网、测试环境
FTPS commons-net + SSL 外网、生产环境
SFTP JSch 或 VFS SSH 环境、高安全要求

如需 SFTP 示例,请告诉我,我可以提供 JSch 的实现代码。

首发原创文章,作者:王坚‌,如若转载,请注明出处:https://test.idctop.com/article/482293.html

赞 (0)
python棋怎么玩?python零基础入门教程
上一篇 2026年7月11日 17:06
pyethereum python是什么?pyethereum python教程
下一篇 2026年7月11日 17:09

相关推荐

  • 手机有wifi连不上服务器是怎么回事,怎么办?

    手机有WiFi但连不上服务器,通常是因为DNS解析错误、IP地址冲突或路由器AP隔离开启,按以下步骤排查即可解决,手机有WiFi但连不上服务器?先排查DNS和路由器设置手机显示WiFi图标连接正常,但打开应用提示服务器连接失败,多数情况是网络层配置问题,分三步排查,按顺序操作,DNS解析错误DNS负责将域名转为……

    2026年8月21日
    800
  • 如何快速掌握服务器配置进阶实战技术?,如何配置服务器

    从系统参数到高并发架构的进阶指南服务器配置并非堆砌硬件,而是基于业务场景对计算、存储、网络与系统内核进行系统性调优的工程实践,很多运维朋友在服务器配置实战中经常陷入两难:配置过高造成资源浪费,配置不足又导致业务频繁告警,这篇文章直接聚焦进阶实战,从硬件选型逻辑、Linux内核调优、高并发架构落地到安全加固,每一……

    2026年8月20日
    200
  • 华为开发管理怎么做?华为IPD流程详解

    华为开发管理体系的核心在于将研发视为一种可管理的投资行为,而非单纯的技术创造过程,这一体系通过结构化的流程、量化的指标以及严格的质量控制,确保了产品开发从概念到市场交付的全生命周期可控,从而实现了商业价值的最大化, 对于寻求提升研发效能的团队而言,理解并借鉴这一管理模式,是打破成长瓶颈、构建核心竞争力的关键路径……

    2026年3月5日
    13900
  • ftp上传网站步骤_使用AMH建站

    用AMH面板建站后,FTP上传网站文件的核心路径是:先在AMH后台创建站点获取FTP专用账号,再用FileZilla这类客户端连接服务器,把本地网站文件拖入远程目录,最后解析域名并完成数据库导入,这套流程看着简单,实际操作中不少新手卡在账号权限、目录选错、文件权限这三大坑上,下面把AMH建站后的FTP上传完整步……

    2026年8月13日
    300
  • AI智能监控怎么安装,详细安装步骤图解教程

    AI智能监控的安装并非简单的设备物理连接,而是一项融合了网络架构、硬件部署与算法调优的系统工程,其核心结论在于:成功的安装必须建立在科学的点位规划、稳定的网络传输以及精准的AI参数配置之上,只有硬件与软件算法深度协同,才能实现从“看得见”到“看得懂”的质变, 许多用户在部署过程中往往忽视了环境光线对算法的影响以……

    2026年2月18日
    18500
  • 广州虚拟主机怎么安装wdcp,wdcp面板安装教程步骤

    在广州节点虚拟主机环境中安装WDCP面板,本质是通过VPS/云服务器重塑底层权限,以实现比传统共享虚拟主机更高效的可视化运维与网站管理,广州虚拟主机与WDCP的适配逻辑传统虚拟主机的地域瓶颈华南地区的外贸与本土企业常面临传统共享虚拟主机的权限制约,2026年IDC行业数据显示,超过68%的广州中小企业在建站半年……

    2026年4月27日
    6300
  • 如何提升高并发服务性能?高并发性能优化实战指南

    高性能服务的核心在于通过系统化的架构设计和精细化技术控制,实现低延迟、高并发与高可用性目标,以下是经过大规模生产验证的实践方案:架构设计核心原则异步非阻塞模型// Netty事件循环组示例EventLoopGroup bossGroup = new NioEventLoopGroup(1);EventLoopG……

    2026年2月13日
    14900
  • SQL查询报错怎么解决?sql查询速度慢优化技巧

    关于SQL查询的问题在服务器性能评估的语境下,”SQL查询的问题”往往不仅仅是一个数据库层面的技术痛点,更是衡量服务器整体I/O吞吐量、内存管理效率以及网络延迟的关键指标,对于追求极致性能的企业级应用而言,理解底层硬件如何影响SQL执行效率,是选择合适服务器配置的核心依据,本次测评将深入剖析不同服务器架构在处理……

    2026年6月12日
    3500
  • 搬瓦工退款政策详解?如何申请全额退款

    搬瓦工退款政策详解在VPS(虚拟专用服务器)租赁市场中,搬瓦工(BandwagonHost)凭借其稳定的网络质量和良好的口碑,长期占据着亚洲用户的首选位置,对于初次接触或希望切换服务商的用户而言,退款政策往往是决策过程中最关键的一环,本文将深入剖析搬瓦工的退款机制,并结合2026年的最新市场动态,为您提供一份详……

    2026年7月6日
    9700
  • Java字符串处理遇到难题怎么办?java字符串常用操作方法有哪些

    关于java中字符串处理问题在服务器性能测评的语境下,讨论Java字符串处理并非单纯的技术探讨,而是直接关联到应用层吞吐量、内存占用以及服务器资源调度的核心指标,对于运行在高并发场景下的Java应用(如Spring Boot微服务、大型电商系统或实时数据处理平台),字符串操作往往是CPU和内存的瓶颈所在,选择一……

    2026年6月14日
    4200

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注