FTPClient(org.apache.commons.net.ftp.FTPClient)无法检索大型xml文件

时间:2011-08-30 17:14:21

标签: java ftp apache-commons-net

我的ftp位置有三种不同大小的文件,分别为2KB,76KB和216MB。我必须逐个处理这些文件,我能够使用retrieveFileStream(FILE_NAME_HERE)轻松检索前两个文件,但是当处理第三个文件时,它需要永远(我的应用程序保持挂起)没有结果。我必须将文件作为输入流,并在以后使用jaxb对象。这是我用来获取输入流的实用方法:

public InputStream convertToInputStream(FTPFile file) throws IOException{
        if(file!=null){
            InputStream is=ftp.retrieveFileStream(file.getName());

            ftp.completePendingCommand();
            return is;

        }

        return null;

你能指出我在这里做错了吗?

1 个答案:

答案 0 :(得分:1)

这可能是为了帮助你(可能会帮助其他人),但是当我遇到类似的问题(上传和下载)时,我能够通过设置缓冲区大小setBufferSize()来解决它,连接后看到下面的代码片段。这使得我从12分钟上传240MB文件到18秒,下载也有类似的改进。

我将BUFFER_SIZE设置为32768但是8192几乎也能正常工作,特别是对于50MB以下的文件,之后在较大的尺寸上略有改进。

if (this.ftpClient.isConnected())
{
    this.ftpClient.enterLocalPassiveMode();
    this.ftpClient.setBufferSize(BUFFER_SIZE);
    try
    {
        this.ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
    }
    catch (IOException e)
    {
        log.error(e.getLocalizedMessage(), e);
        throw Throwables.propagate(e);
    }
}

希望这有帮助。