You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在AWS虚拟机上Java FTP客户端获取文件时出现空指针异常求助

问题排查与修复方案

针对你在AWS虚拟机上FTP客户端获取文件返回null的问题,结合本地正常、AWS异常的场景,从以下核心点排查修复:

1. 强制开启FTP被动模式

AWS虚拟机通常处于VPC/防火墙后,FTP默认的主动模式会被安全组拦截,导致无法获取文件列表。必须切换到被动模式:
在登录成功后添加被动模式配置:

else 
{
    System.out.println("LOGGED IN SERVER");
    // 开启被动模式,关键修复点
    client.enterLocalPassiveMode();
    
    boolean dirChanged = client.changeWorkingDirectory("/crypto");
    // ... 后续代码
}

2. 校验工作目录切换是否成功

当前代码未判断changeWorkingDirectory的返回值,若AWS环境下切换目录失败(比如权限不足、目录不存在),会在错误目录下查找文件,自然返回null。添加校验:

boolean dirChanged = client.changeWorkingDirectory("/crypto");
if (!dirChanged) {
    System.err.println("切换目录到/crypto失败,当前目录:" + client.printWorkingDirectory());
    return;
}

3. 修复文件名大小写敏感问题

FTP服务器若为Unix/Linux系统,文件名是大小写敏感的,本地Windows环境不敏感。将文件名匹配改为忽略大小写:

// 原代码
// if(file.getName().contains("filetolisten.txt"))
// 修改后:
if(file.getName().toLowerCase().contains("filetolisten.txt"))

4. 提前拦截空指针风险

当前代码在获取listenedFile后直接调用getName(),完全没做null判断,这是空指针的直接来源,必须先判断再操作:

listenedFile = getListenedFile();
if(listenedFile != null)
{
    System.out.println(listenedFile.getName());
    baseFileTimeStamp.set(listenedFile.getTimestamp().getTimeInMillis());
} else {
    System.err.println("未找到目标文件filetolisten.txt");
}
// 移除原有的提前打印getName的代码

5. 增强文件列表的容错判断

在getListenedFile方法中,先判断listFiles()的返回值是否为空,避免循环根本不执行:

private FTPFile getListenedFile() {
    FTPFile returnedFile = null;
    try {
        FTPFile[] files = client.listFiles();
        if(files == null || files.length == 0) {
            System.err.println("当前目录无文件");
            return null;
        }
        for(FTPFile file : files)
        {
            if(file.getName().toLowerCase().contains("filetolisten.txt"))
                returnedFile = file;
        }
    } catch (Exception e) {
        // ... 原有异常处理代码
    }
    return returnedFile;
}

将上述修改整合后重新部署到AWS虚拟机测试,即可解决文件找不到的问题。

内容的提问来源于stack exchange,提问作者Boub Leon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 03:25:35