8

私は org.apache.commons.net.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 を初めて使用しますが、何か問題がありますか?

4

2 に答える 2

2

「取得」コマンドの後に追加すると、問題なく動作します。

        int response = client.getReply();
        if (response != FTPReply.CLOSING_DATA_CONNECTION){
            //TODO 
        }
于 2012-04-12T19:43:00.393 に答える