当前位置 博文首页 > ftpclient需要释放资源,FTPClient踩过的坑

    ftpclient需要释放资源,FTPClient踩过的坑

    作者:xiaoyingying 时间:2021-07-03 10:57

    一、ftpClient.enterLocalPassiveMode()
        publicstaticfinalintPASSIVE_LOCAL_DATA_CONNECTION_MODE=2;
        官网关于该常量的说明:
        AconstantindicatingtheFTPsessionisexpectingalltransferstooccurbetweentheclient(local)andserverandthattheserverisinpassivemode,requiringtheclienttoconnecttotheserver'sdataporttoinitiateatransfer
        官网关于该方法的说明:
        SetthecurrentdataconnectionmodetoPASSIVE_LOCAL_DATA_CONNECTION_MODE.Usethismethodonlyfordatatransfersbetweentheclientandserver.ThismethodcausesaPASV(orEPSV)commandtobeissuedtotheserverbeforetheopeningofeverydataconnection,tellingtheservertoopenadataporttowhichtheclientwillconnecttoconductdatatransfers.TheFTPClientwillstayinPASSIVE_LOCAL_DATA_CONNECTION_MODEuntilthemodeischangedbycallingsomeothermethodsuchasenterLocalActiveMode()。
        翻译如下:
        将当前数据连接模式设置为被动本地数据连接模式。此方法仅用于客户端和服务器之间的数据传输。此方法导致在打开每个数据连接之前向服务器发出一个PASV(或EPSV)命令,告诉服务器打开一个数据端口,客户端将连接到该端口进行数据传输FTPClient将保持被动本地数据连接模式,直到通过调用enterLocalActiveMode()等其他方法更改模式为止。
        二、ftpClient.listFiles()返回null
        1、检查当前工作目录是否正确:
        ftpClient.printWorkingDirectory();
        若工作目录不正确,需切换目录:
        ftpClient.changeWorkingDirectory(inpath);
        2、检查文件传输模式是否是被动模式:
        在ftpClient.listFiles();之前添加:
        ftpClient.enterLocalPassiveMode();
        三、ftpClient.retrieveFileStream(Stringfilename)返回null
        for(FTPFileftpFile:ftpFiles){
        inputStream=ftpClient.retrieveFileStream(ftpFile.getName());
        //...省略其他代码
        };
        该代码只能成功下载第一个文件,从第二个文件开始inputStream都是null,原因如下:
        在每次执行完下载操作之后,completePendingCommand()会一直在等FTPServer返回226Transfercomplete,但是FTPServer只有在接受到InputStream执行close方法时,才会返回。所以一定先要执行close方法。不然在第一次下载一个文件成功之后,之后再次获取inputStream就会返回null。
        所以需要修改代码如下:
        for(FTPFileftpFile:ftpFiles){
        inputStream=ftpClient.retrieveFileStream(ftpFile.getName());
        //...省略其他代码
        inputStream.close();
        ftpClient.completePendingCommand();
        };
        四,带证书的FTPSClient使用
        原文链接:https://blog.csdn.net/qq_34721505/article/details/102937725