Проблема с классом FTPClient в java

Я использую орг."Апач".общин.чистая.по FTP.FTPClient и видя поведение, ну... озадачивающий.

метод ниже намерен пройти через список FTPFile, прочитать их, а затем сделать что-то с содержимым. Это все работает. Что не (на самом деле) работает, так это то, что объект FTPClient делает следующее...

1) Properly retrieves and stores the FIRST file in the list  
2) List item evaluates to NULL for x number of successive iterations of the loop (x varies on successive attempts  
3) manages to retrieve exactly 1 more file in the list  
4) reports that it is null for exactly 1 more file in the list  
5) hangs indefinitely, reporting no further activity.

public static String mergeXMLFiles(List<FTPFile> files, String rootElementNodeName, FTPClient ftp){
        String ret = null;
        String fileAsString   = null; 
        //InputStream inStream;
        int c;

        if(files == null || rootElementNodeName == null)
            return null;
        try {
            System.out.println("GETTING " + files.size() + " files");
            for (FTPFile file : files) {
                fileAsString = "";
                InputStream inStream = ftp.retrieveFileStream(file.getName());

                if(inStream == null){
                    System.out.println("FtpUtil.mergeXMLFiles() couldn't initialize inStream for file:" + file.getName());

                    continue;//THIS IS THE PART THAT I SEE FOR files [1 - arbitrary number (usually around 20)] and then 1 more time for [x + 2] after [x + 1] passes successfully.
                }
                while((c = inStream.read()) != -1){

                    fileAsString += Character.valueOf((char)c);
                }
                inStream.close();


                System.out.println("FILE:" + file.getName() + "n" + fileAsString);
            }


        } catch (Exception e) {
            System.out.println("FtpUtil.mergeXMLFiles() failed:" + e);
        }
        return ret;
    }

кто-нибудь видел что-то подобное? Я новичок в FTPClient, я делаю что-то не так?

2 ответов


согласно API для FTPClient.retrieveFileStream(), метод возвращает null когда он не может открыть подключение к данным, в этом случае вы должны проверить код ответа (например,getReplyCode(), getReplyString(), getReplyStrings()), чтобы понять, почему это не удалось. Кроме того, вы должны завершить передачу файлов, позвонив completePendingCommand() и проверка того, что передача действительно была успешной.


он работает нормально, когда я добавляю после команды "получить":

        int response = client.getReply();
        if (response != FTPReply.CLOSING_DATA_CONNECTION){
            //TODO 
        }