当前位置:  开发笔记 > 编程语言 > 正文

java中的FTPClient类问题

如何解决《java中的FTPClient类问题》经验,为你挑选了1个好方法。

我正在使用org.apache.commons.net.ftp.FTPClient并且看到的行为很好......令人费解.

下面的方法打算通过FTP文件列表,读取它们然后对内容做一些事情.这一切都奏效了.什么不是(真的)工作是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 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的新手,我做错了吗?



1> Zach Scriven..:

根据该API FTPClient.retrieveFileStream(),该方法返回null时,它无法打开数据连接,在这种情况下,你应该检查答复代码(例如getReplyCode(),getReplyString(),getReplyStrings()),看看它为什么失败.此外,您可以通过调用completePendingCommand()并验证传输确实成功来完成文件传输.


completePendingComand()!!!!! 你是一个绅士和一个学者我正在检查replyCode(在前面的方法,我做了所有的连接垃圾),这一切都很好.我忽略了指定completePendingCommand重要性的文档.非常感谢.
推荐阅读
小妖694_807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有