如何用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 JSchVFS SSH 环境、高安全要求

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

首发原创文章,作者:世雄 - 原生数据库架构专家,如若转载,请注明出处:https://idctop.com/article/482293.html

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

相关推荐

  • AIoT项目市场前景如何?AIoT项目市场分析报告

    AIoT项目市场正处于从技术验证向规模化商业落地的关键转折期,未来的核心红利将不再单纯依赖硬件销售,而是转向以数据价值为核心的场景化服务与系统化解决方案,企业若想在这一赛道突围,必须摒弃单一的设备思维,构建“端边云网智”一体化的生态能力,深耕垂直行业痛点,方能实现可持续增长,市场格局演变与核心驱动力当前,AIo……

    2026年3月17日
    12800
  • AI是什么意思,人工智能到底能用来做什么?

    人工智能(AI)是计算机科学的一个前沿分支,致力于创造能够模拟、延伸和扩展人类智能的理论、方法、技术及应用系统,从本质上看,它是通过机器对人的意识思维过程进行模拟,包括学习、推理、感知、自我修正等能力,当我们在探讨ai是什么意思时,实际上是在审视一种能够处理海量数据、识别复杂模式并自主做出决策的技术力量,这种技……

    2026年2月18日
    32000
  • AI智能监控需要哪些技术?核心技术方案大揭秘

    AI智能监控需要哪些技术?AI智能监控系统并非单一技术产物,而是多领域尖端技术深度融合的复杂体系,其高效运转依赖于感知层、智能分析层、应用层三大核心架构的协同支撑,共同实现从环境感知到智能决策的价值闭环,感知层技术:系统的“眼睛”与“神经末梢”感知层是AI监控获取原始数据的基础,其能力直接影响后续分析的准确性……

    2026年2月16日
    16300
  • AIoT音频测试怎么做?AIoT音频测试方法详解

    在智能化浪潮席卷全球的今天,音频交互已成为物联网设备的核心入口,AIoT音频测试不再仅仅是检验音质好坏的手段,而是决定智能设备用户体验与市场竞争力的关键门槛,核心结论在于:构建一套融合传统声学指标与AI算法验证的自动化测试体系,是确保AIoT设备在复杂场景下实现“听得清、听得懂、答得对”的唯一路径, 这要求研发……

    2026年3月18日
    12100
  • ajax怎么查看端口是否连接数据库?数据库连接失败怎么排查

    通过Ajax异步请求后端接口,由后端服务器执行端口连通性检测(如TCP握手或Ping命令),并将检测结果以JSON格式返回前端,从而在不刷新页面的情况下实现数据库连接状态的实时监控,在现代Web应用架构中,数据库的健康状况直接决定了业务的连续性,传统的页面刷新检测方式不仅体验生硬,还会增加服务器不必要的负载,利……

    2026年6月3日
    3500
  • 消息队列更新后如何配置?消息队列更新后配置方法

    更新消息队列的核心在于确保数据一致性、提升系统吞吐量并降低延迟,关键在于根据业务场景选择合适的中间件(如Kafka、RabbitMQ或RocketMQ)并实施严格的幂等性设计与监控策略,在分布式系统架构中,消息队列(Message Queue, MQ)早已不再是简单的“异步解耦”工具,而是支撑高并发业务的核心神……

    程序编程 2026年5月27日
    3400
  • AJAX安全助真的有用吗,AJAX跨域请求如何设置安全

    AJAX安全助通过拦截未授权请求、验证Token有效性及实施严格的输入过滤,能有效阻断CSRF、XSS及数据篡改风险,是构建现代Web应用安全防线的关键组件,在Web开发的演进历程中,Asynchronous JavaScript and XML(AJAX)技术彻底改变了用户与服务器交互的方式,它让页面无需刷新……

    2026年6月3日
    3100
  • 服务器租用和虚拟主机租用有什么区别?服务器租用和虚拟主机租用哪个更划算

    选择服务器/虚拟主机租用服务,核心在于匹配业务阶段、技术能力与预算目标——初创企业宜选虚拟主机,中大型应用应选独立服务器,而混合架构则兼顾弹性与性能,虚拟主机租用:轻量级网站的高效起点适用对象:个人博客、小型企业官网、初创项目(日访问量<5000)核心优势:成本低:月租30–150元,含域名、SSL、基础备份零……

    程序编程 2026年4月17日
    6200
  • 广西航信服务器地址是多少?广西航信服务器地址怎么查

    广西航信的服务器地址并非单一固定IP,而是根据业务类型(如税务UKey、电子发票平台、政务云等)分布在多个数据中心节点,具体访问地址需通过广西数字政务一体化平台或广西航信官方门户查询,通常以https://开头的域名形式存在,广西航信服务器架构与核心节点解析在数字化税务和政务服务的背景下,理解广西航信(广西航天……

    2026年5月28日
    5200
  • ajax如何实现查询数据库,ajax查询数据库乱码怎么办

    AJAX实现数据库查询的核心在于利用JavaScript的XMLHttpRequest对象或Fetch API异步发送HTTP请求,由后端接口处理SQL并返回JSON数据,前端解析后动态更新DOM,从而实现无刷新局部刷新页面,在2026年的Web开发语境下,传统的整页刷新模式早已成为历史,用户对于交互体验的要求……

    2026年5月31日
    3100

发表回复

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