如何正确关闭FTPClient FileStream

时间:2017-10-31 16:53:17

标签: java ftp apache-commons-net

我正在使用Apache Commons Net的FTPClient从位于服务器上的文件中读取内容。只读一次就能正常工作。但是当我尝试读取第二个文件时,我的FTPClient的InputStream返回null。这是我的代码:

            FTPClient ftpClient = new FTPClient();
            ftpClient.connect("myhostname");
            ftpClient.login("myusername", "mypassword");

            // read InputStream from file
            InputStream inputStream = ftpClient.retrieveFileStream("/my/firstfile.txt");
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));

            // read every line...

            // close everything
            inputStream.close();
            bufferedReader.close();


            // second try
            inputStream = ftpClient.retrieveFileStream("/my/secondfile.txt");
            bufferedReader = new BufferedReader(new InputStreamReader(inputStream));

            // ...
            inputStream.close();
            bufferedReader.close();

我做错了什么?

1 个答案:

答案 0 :(得分:2)

关闭InputStream后,请执行以下操作:

ftpClient.completePendingCommand();

您可以在javadoc of FTPClient#retrieveFileStream

中找到更多信息
  

要完成文件传输,您必须调用completePendingCommand并检查其返回值以验证是否成功。如果不这样做,后续命令可能会出现意外行为。