关于问题我在java通过ftp(ssl) 连接ftp服务器成功,怎么list文件中已描述:
具体就是 在通过使用FTPSClient类进行ssl ftp的连接 可以连接成功,但list() ,listNames()或listFiles() 为null.
解决办法:
在ist方法之前调用了
SocketFactory factory = SSLSocketFactory.getDefault();
sftpClient.setSocketFactory(factory);
具体为:
sftpClient.enterLocalPassiveMode();
/* important */
SocketFactory factory=null;
factory= SSLSocketFactory.getDefault();
sftpClient.setSocketFactory(factory);
/* list所在目录的文件 返回文件名到数组中
通过for循环进行遍历控制台打印
*/
String[] fileNames = sftpClient.listNames();
for(String fileName:fileNames){
logger.info(fileName);
}
然后listFiles(). 成功!
1.为什么调用此方法后 就可以list文件了?
初步分析:sftpclient(FTPSClient)连接方法是调用父类(FTPClient)方法,而其本身使用的ssl加密的相关方法在父类中并没有被实现,此方法(setSocketFactory)作用是调用设置了生成此类的工厂为SSLSocketFactory,进而实现ssl的相关功能.
备注: 由于本人代码写的较乱,没有粘贴完整代码,若有需要欢迎留言所要.