Problème avec la classe FTPClient dans Java



0 Answers

Cela fonctionne bien quand j'ajoute après la commande "retrieve":

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

J'utilise org.apache.commons.net.ftp.FTPClient et je vois un comportement qui est, bien ... perplexe.

La méthode ci-dessous a l'intention de passer par une liste FTPFile, les lire et ensuite faire quelque chose avec le contenu. Tout fonctionne. Ce qui ne fonctionne pas (vraiment), c'est que l'objet FTPClient fait ce qui suit ...

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;
    }

Quelqu'un at-il vu quelque chose comme ça? Je suis nouveau sur FTPClient, est-ce que je fais quelque chose de mal avec ça?




Related