Java ApacheCommonsNetFTPClient-PUT而不是STOR?

Java ApacheCommonsNetFTPClient-PUT而不是STOR?,java,ftp,apache-commons-net,Java,Ftp,Apache Commons Net,我使用ApacheCommonsNetFTPClient作为批处理作业的一部分分发文件。客户端是封装的,但我大致发出以下方法调用(为了简洁起见,我省略了错误处理、流处理等): 当我发出上述命令时,将向FTP服务器发送以下命令: USER zoor PASS ******** TYPE I CWD path/ PORT 127,0,0,1,229,72 STOR file1.txt 这个很好用。但是,现在我需要将文件发送到一个旧系统,该系统不支持CWD或STOR,而是分别依赖CD和PUT 现在我

我使用ApacheCommonsNetFTPClient作为批处理作业的一部分分发文件。客户端是封装的,但我大致发出以下方法调用(为了简洁起见,我省略了错误处理、流处理等):

当我发出上述命令时,将向FTP服务器发送以下命令:

USER zoor
PASS ********
TYPE I
CWD path/
PORT 127,0,0,1,229,72
STOR file1.txt
这个很好用。但是,现在我需要将文件发送到一个旧系统,该系统不支持
CWD
STOR
,而是分别依赖
CD
PUT

现在我的问题是,如何让FTPClient使用这些命令

我可以使用
sendCommand
方法发送
CD
命令,但我不知道如何正确地(正确地)使用PUT命令来发送该命令(因为我还必须发送文件数据)

注意:我知道有比FTP更好的方法来分发这样的文件,但不幸的是,我的手被束缚住了。收件人正在使用FTP,不愿意更改


更新:旧系统是AS/400机器

我突然想到CD和PUT实际上不是FTP命令,因此这个问题没有什么意义。。解决方案(因为我们需要它尽快工作)是将文件传输到我们自己的FTP服务器,并在该服务器上通过SSH调用一个脚本,将文件传输到AS/400机器。

这应该可以,我知道您已经解决了这个问题,但为了完整性,您知道AS/400是否需要任何站点命令来存储文件

你回来的时候出了什么差错

我定期将文件发送到MVS/Z/OS,有几个站点命令需要首先发送以进行存储和设置

站点命令类似于:

  • 踪迹
  • 气缸主=350辅助=300
  • RECFM=FB LRECL=1516 BLKSIZE=31836
  • condisp=delete
这里有一个我使用的小代码,ftp本质上就是您在示例中使用的FTPClient

    public boolean sendSiteCommand(String siteCmd){
    if (null == siteCmd){
        System.err.println("Warning, Null Parameter sent to sendSiteCommand, aborting...");
        return false;
    }

    try{

        return ftp.sendSiteCommand(siteCmd);

    }catch (Exception e){
        System.out.println("Error Occurred Sending Site Command to Remote System, aborting...");
        e.printStackTrace(System.err);
        return false;
    }
}

如果确实需要将文件作为另一个命令上载,则始终可以扩展
FTPClient
,并使用不同的命令调用内部方法。它们是这样构建的,您可以将任何字符串作为命令提供给已经存在的存储

例如:

    public static class OldFtpClient extends FTPClient {
        public OutputStream putFileStream(String remote) throws IOException {
            return _storeFileStream("PUT", remote);
        }
    }

类的源代码可以在中找到。

我自己找到了site命令,但是在我的情况下不需要它。。。错误是,当我通过FTP登录服务器时,CWD和STOR未被识别。。。据我从As/400文档中了解,您与一个理解CD/PUT命令的FTP客户机对话,当您发出这样的命令时,它将与一个FTP服务器对话,并向该服务器发送CWD和STOR命令。。但是,我无法直接与服务器对话,因此无法使用实际的FTP命令上载文件。
    public static class OldFtpClient extends FTPClient {
        public OutputStream putFileStream(String remote) throws IOException {
            return _storeFileStream("PUT", remote);
        }
    }