如何用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

相关推荐

  • 服务器2008远程配置文件怎么设置?服务器2008远程桌面配置文件位置

    服务器2008远程配置文件是实现远程桌面管理、提升运维效率的核心组件,其路径、权限与策略直接影响系统安全与稳定性,正确配置该文件,可避免90%以上的远程连接失败问题,同时显著降低安全风险,什么是服务器2008远程配置文件?服务器2008远程配置文件,特指Windows Server 2008中用于管理远程桌面……

    2026年4月15日
    6200
  • AIOT视觉芯片工具有哪些?AIOT视觉芯片工具推荐

    AIOT视觉芯片工具已成为连接物理世界与数字智能的关键桥梁,其核心价值在于通过高度集成的软硬件协同方案,解决了边缘端设备“看不懂、传不回、算不动”的三大痛点,对于开发者和企业而言,选择并熟练运用此类工具,能够将视觉算法落地的周期从数月缩短至数周,甚至数天,同时显著降低算力成本与功耗门槛,这不仅是技术开发的效率革……

    2026年3月9日
    10800
  • 镇江电信云服务器79元真便宜吗?江苏电信云服务器多少钱

    对于需要高性价比计算资源的中小企业及个人开发者而言,江苏镇江电信云服务器凭借79元的超低门槛、E5-2680v4处理器的强劲算力以及30M大带宽,是目前平衡性能与成本的理想选择,在云计算市场日益内卷的当下,寻找一款既稳定又便宜的服务器并非易事,许多用户往往在“低价低配”和“高价高配”之间纠结,而特语云推出的这款……

    2026年6月26日
    1700
  • 搬瓦工日本软银JPOS_1机房VPS值得入手吗,搬瓦工日本机房测评

    搬瓦工日本软银JPOS_1机房凭借2.5Gbps大带宽和2T月流量,是2026年追求高性价比与低延迟用户的优选方案,年付仅$74.57即可解锁1核2G内存与40GB SSD存储资源,在VPS租赁市场日益内卷的当下,寻找一款既稳定又便宜的海外节点并非易事,搬瓦工(BandwagonHost)作为老牌服务商,其日本……

    2026年6月30日
    2300
  • 共青团舆情监测官具体做什么?舆情监测员岗位职责要求

    共青团舆情监测官工作职责在数字化传播时代,舆情监测不仅是信息收集,更是对海量数据实时处理、精准分析与快速响应的综合考验,对于承担“共青团舆情监测官”这一关键职责的团队而言,稳定、高效且具备高并发处理能力的服务器基础设施,是保障7×24小时不间断监测、确保数据零丢失的核心基石,本文将从专业测评角度,深入解析适用于……

    2026年6月17日
    4200
  • DHCP租期设置1分钟会有什么后果,会不会频繁掉线?

    把DHCP租期设成1分钟,会让整个网络陷入反复断线、地址频繁冲突、设备CPU空转的混乱状态,实际可用性几乎为零,这个设置看似能让IP地址释放得特别快,背后却隐藏着一连串连锁反应,DHCP租期到底是干什么的每个设备接入局域网时,都要向DHCP服务器领一张“身份证”也就是IP地址,租期规定了这张身份证的有效时长,租……

    2026年8月19日
    2500
  • cordova 开发的app怎么样,cordova app开发难吗

    Cordova 开发的app开发模式,其核心优势在于“一次开发,多端部署”的高效性,能够以接近原生应用的性能,显著降低跨平台项目的研发成本与维护难度,对于追求快速迭代、多平台覆盖的移动互联网项目而言,Cordova 依然是当前最具性价比的技术解决方案之一,它通过标准的 Web 技术栈构建移动应用,不仅降低了对原……

    2026年4月5日
    9100
  • AIoT物联网峰会有什么亮点?2026物联网大会最新议程解析

    AIoT产业已步入“智联万物”的深水区,技术融合不再是选择题,而是生存题,当前,物联网行业正从单纯的连接规模增长转向数据价值挖掘,人工智能(AI)与物联网(IoT)的深度耦合,催生了全新的产业生态,企业若想在这一轮技术浪潮中突围,必须构建“端侧感知、边侧推理、云端训练”的协同体系,解决碎片化场景下的落地难题,实……

    2026年3月20日
    13700
  • 服务器ipphp怎么用,服务器ipphp配置教程

    在服务器运维与开发场景中,配置正确的 PHP 运行环境是保障网站性能、安全及稳定性的核心基石,大多数网站访问缓慢、数据泄露或功能异常,根源往往不在于代码逻辑本身,而在于服务器 IP 与 PHP 环境的匹配度、版本兼容性以及安全策略的缺失,通过精细化配置 PHP 进程管理、优化内存限制、严格限制文件权限以及部署针……

    程序开发 2026年4月19日
    4300
  • Friendhosting十五周年VPS六折值得买吗?美国日本机房优惠详情

    Friendhosting十五周年庆典期间,全场VPS主机低至六折,月付仅需€1.8起,提供美国、荷兰、日本等13个全球节点,是追求高性价比与稳定性的理想选择,Friendhosting十五周年优惠活动深度解析价格优势与机房分布概览在云计算市场竞争日益激烈的今天,寻找一款既便宜又稳定的VPS服务并非易事,Fri……

    2026年6月29日
    2800

发表回复

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