小编S. *_*rth的帖子

commons-net FTPClient.retrieveFileStream() 返回错误结果

我在使用 commons-net FTPClient 时遇到问题。如果我从我的 ftp 服务器上使用retrieveFileStream() 下载文件,它可以工作,但我得到的结果是“150 Opening BINARY mode data connection for ...”。如果我调用 noop() 我会得到“226 传输完成”结果。对于接下来的每个操作,我都会得到前一个操作的结果。

我发现,FTPClient 读取结果直到行尾,如果有两个结果行(如在retrieveFileStream()之后),我会在下一个命令之后得到第二个结果行。我通过重写 FTPClient.retrieveFileStream() 做了一个解决方法,如下所示:

public static void main(String[] args){
    try {
        MyFTPClient ftpClient = new MyFTPClient();
        try {
            ftpClient.connect(ftphost, 21);
            if(!ftpClient.login( ftpuser, ftppassword )){
                throw new RuntimeException(ftpClient.getReplyString());
            }
            if(!ftpClient.changeWorkingDirectory("in")){
                throw new RuntimeException(ftpClient.getReplyString());
            }
            FTPFile[] files = ftpClient.listFiles();
            for(FTPFile file: files){
                if(file.getName().startsWith(FILENAME) && (file.getType() == FTPFile.FILE_TYPE)){
                    InputStream in = ftpClient.retrieveFileStream(file.getName());
                    CsvFile csvFile = new CsvFile(in, "ISO-8859-1", ';', "yyyyMMdd", "#.00", Locale.US, false);
                    in.close();
                    in = …
Run Code Online (Sandbox Code Playgroud)

java ftp apache-commons apache-commons-net

2
推荐指数
1
解决办法
3070
查看次数

标签 统计

apache-commons ×1

apache-commons-net ×1

ftp ×1

java ×1