如何用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://idctop.com/%e5%a6%82%e4%bd%95%e7%94%a8java%e4%bb%a3%e7%a0%81%e5%ae%9e%e7%8e%b0ftp%e9%93%be%e6%8e%a5%e6%9c%8d%e5%8a%a1%e5%99%a8%ef%bc%9fjava%e8%bf%9e%e6%8e%a5ftp%e6%9c%8d%e5%8a%a1%e5%99%a8%e4%bb%a3%e7%a0%81/

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

相关推荐

  • 内存计算型实例适合热点数据全驻留吗,内存计算型实例是什么?

    内存计算型实例的核心价值就是把热点数据集全部驻留内存,让读请求绕开磁盘与网络存储,直接在内存里完成命中,如果你的业务存在高频访问、低延迟要求的少量热数据,选它基本不会错,内存计算型实例适合哪些场景?先看懂热点数据驻留内存的逻辑很多人一听到内存计算型实例,第一反应是“贵”,但贵有贵的道理,它把内存当成主存储,而不……

    2026年9月10日
    400
  • 语音连麦弱网对抗与带宽自适应怎么做,语音连麦声音卡顿怎么解决

    语音连麦的弱网对抗没有银弹,核心思路是让客户端根据实时网络质量动态调整编码码率、冗余策略和缓冲策略,在卡顿与音质之间找到当下最优平衡点,语音连麦弱网怎么处理:从用户感知到技术拆解先分清“卡”在哪一环上行弱:说话断断续续,对方听不清你,通常由上传丢包或带宽不足引发,下行弱:你听对方一顿一顿,大概率是下载链路出现抖……

    2026年9月12日
    000
  • 杭州业务系统卡顿,租用物理服务器真能缓解吗,如何选择?

    杭州业务系统卡顿,租用物理服务器能否缓解,答案是:分场景,能缓解一部分因硬件争抢引发的卡顿,但解决不了应用代码和架构层面的瓶颈,这不是一句废话,做了这么多年服务器租用,见过太多客户一卡就喊“换物理机”,结果搬过去发现该卡还是卡,判断要不要换,先得知道卡在哪,业务系统卡顿的核心原因,不只是服务器性能问题卡顿这事……

    2026年10月5日
    000
  • Win10音频服务未运行怎么修复,系统声音异常原因

    Windows 10音频服务器未运行的本质是系统核心服务“Windows Audio”被意外停止或依赖组件损坏,最快恢复方法是在服务控制台中将其启动类型改为“自动”并手动启动,配合重启依赖服务即可解决绝大部分场景,Windows 10音频服务器未运行的原因排查音频服务器在Windows体系里指的是Windows……

    2026年10月2日
    000
  • AI物联网平台建设方案有哪些核心步骤?

    2026年AI物联网平台建设的核心在于构建“端-边-云”协同的智能架构,通过标准化协议打通数据孤岛,并利用大模型技术实现从数据采集到自主决策的闭环,从而显著降低运维成本并提升业务响应速度,为什么传统物联网平台在2026年不再适用过去十年,物联网平台主要解决的是“连接”问题,即如何让成千上万的设备在线,但在202……

    2026年6月7日
    3000
  • raid1怎么查服务器有没有做raid1

    检查服务器是否配置了RAID1,核心在于查看磁盘阵列的冗余状态,Linux系统可通过cat /proc/mdstat或mdadm命令确认,Windows系统则需通过磁盘管理或阵列管理工具查看,raid1怎么查服务器有没有做raid1?两种方法搞定要判断一台服务器是否做了RAID1,不能只看硬盘数量,必须从系统层……

    2026年8月12日
    1600
  • Steam连不上服务器咋办,steam无法连接服务器怎么办

    Steam连接不上服务器,多数情况下不是官方服务器全挂,而是本地网络、DNS解析、防火墙拦截或客户端缓存异常在捣乱,按“网络连通→DNS修复→防火墙放行→客户端重置”的顺序排查,基本能恢复登录,steam连接不上服务器怎么办?先做网络层快速排查Steam客户端连不上服务器,最先要判断的是:到底是Steam官方真……

    2026年9月15日
    300
  • t3服务器屏幕显示1-2-3怎么调?,是什么原因

    T3服务器屏1-2-3调节的核心就一句话:按OSD菜单键进入显示设置,依次把亮度、对比度、预设模式三层参数调到位,多数型号的“1-2-3”对应三档快捷存储位,T3服务器屏1-2-3到底在调什么什么是“1-2-3”调节逻辑很多运维第一次看到“1-2-3”会以为是按键顺序,其实它更像屏幕内置的三组快捷方案,调节时不……

    2026年9月15日
    300
  • w7系统路由器虚拟服务器怎么设置,操作步骤是什么?

    win7系统设置路由器虚拟服务器,核心就是在路由器后台的“转发规则”或“虚拟服务器”功能里,把公网端口映射到你那台win7电脑的内网IP上,先确认你拥有公网IP,再给win7电脑绑定固定内网IP,最后填参数保存重启,三步就能搞定,很多朋友手里还留着老款win7电脑,想用它搭个网站、挂个NAS或者远程访问监控,结……

    2026年10月20日
    000
  • xp系统登录云服务器失败如何解决,无法连接远程桌面?

    xp系统登入云服务器失败,核心原因通常集中在远程桌面协议兼容性、网络端口拦截和账号认证三个层面,按顺序排查即可解决绝大多数问题, 不要急着改密码或重装系统,先定位错误提示,再用下面的方法一步一步来,十之八九能顺利登进去,先定位:xp系统登入云服务器失败的五种典型表现失败不是单一情况,不同提示指向不同故障点,先对……

    2026年9月26日
    000

发表回复

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