org.apache.commons.net.ftp
类FTPClient
java.lang.Object继承
org.apache.commons.net.SocketClient org.apache.commons.net.ftp.FTP
org.apache.commons.net.ftp.FTPClient 所有已实现的接口:
可配置 直接已知子类:
FTPHTTPClient , FTPSClient
公共类FTPClient 延伸的FTP 实现了可配置
FTPClient封装了所有必要的功能来存储和检索从FTP服务器上的文件。 这个类负责所有与FTP服务器交互的底层细节,并提供了便捷的更高层次的接口。 正如来自所有类SocketClient ,您必须首先连接到与服务器connect做任何事之前,最后disconnect完成后,你完全与服务器交互。 然后,你需要检查的FTP答复代码,看看是否连接成功。 例如:
布尔错误= 0; 尝试{
诠释答复;
ftp.connect(“ftp.foobar.com”);
System.out.println(“连接到”+服务器+ \ System.out.print(ftp.getReplyString());
/ /连接尝试后,你应该检查代码以验证答复 / /成功。
答复= ftp.getReplyCode();
如果(!FTPReply.isPositiveCompletion(回复)){ ftp.disconnect();
System.err.println(“FTP服务器拒绝连接。”); System.exit(1); }
... / /传送文件 ftp.logout();
}捕捉(IOException异常五){ 误差为真;
e.printStackTrace(); 最后} {
如果(ftp.isConnected()){ 尝试{
ftp.disconnect();
}捕捉(IOException异常雇主组织){ / /什么也不做 } }
System.exit(错误1:0?); }
连接后立即是唯一真正的时候你需要检查答复代码(因为是连接类型为void)。 对于所有的FTP FTPClient指挥方法的公约就是这样,他们要么返回一个布尔值或其他值。 该方法返回一个布尔从FTP服务器成功完成答辩,假假真真的错误条件中的一个或故障而导致的答复。 该方法返回一个布尔值返回值比含有较高水平的FTP命令,或者为null,如果产生一个错误条件答复或故障导致其他数据。 如果您要访问的FTP的确切答复代码导致成功或失败,你必须调用getReplyCode后,成功或失败。
FTPClient的默认设置是它使用FTP.ASCII_FILE_TYPE , FTP.NON_PRINT_TEXT_FORMAT , FTP.STREAM_TRANSFER_MODE和
FTP.FILE_STRUCTURE 。 唯一的文件直接支持的类型是FTP.ASCII_FILE_TYPE和FTP.BINARY_FILE_TYPE 。 因为至少有4种不同的EBCDIC编码,我们还选择了不提供直接支持的EBCDIC。 为了转移EBCDIC和其他不支持的文件类型,你必须创建自己的过滤InputStreams和OutputStreams和总结他们周围的流退回或由FTPClient方法所需。 FTPClient使用NetASCII过滤器流提供ASCII文件透明处理。 我们会考虑把EBCDIC码的支持,如果有足够的需求。 FTP.NON_PRINT_TEXT_FORMAT , FTP.STREAM_TRANSFER_MODE和FTP.FILE_STRUCTURE是唯一支持的格式,传输模式和文件结构。
由于在不同平台上插座处理可以显着差异,在FTPClient自动发出一个新的端口(或EPRT)命令之前,每次传输要求的服务器连接到客户端的数据端口。 这将确保相同的Windows,Unix和Macintosh平台无故障的行为。 此外,它解除不必发出端口(或EPRT)命令自己和与平台有关问题的程序员。
此外,为了安全起见,所有的数据连接到客户端进行验证,以确保他们打算从党(主机和端口)起源。 如果一个数据连接是由党发起的一个意外,该命令将关闭套接字并抛出一个IOException异常。 您可以禁用此行为setRemoteVerificationEnabled()
你应该记住,在FTP服务器可以选择过早关闭连接,如果客户已超过给定的时间较长时期(通常为900秒)闲置。 将检测的FTPClient类FTP服务器连接过早关闭,当它收到FTPReply.SERVICE_NOT_AVAILABLE响应命令。 一旦这种情况发生时,FTP类方法遇到的答复将抛出一个FTPConnectionClosedException 。
FTPConnectionClosedException是一个子类IOException ,因此不必分别被捕获,但如果你要抓住它分开,它的catch块必须出现在更一般的IOException catch块。 当你遇到一个FTPConnectionClosedException ,必须断开与连接disconnect()妥善清理,系统资源使用FTPClient。 在断开,你可以检查代码和文本的最后答复与getReplyCode , getReplyString和getReplyStrings 。 您可能会避免服务器断开,而客户端闲置的空操作指令通过定期发送到服务器。 它不是单独列出每个方法,我们在这里提到的每个方法与服务器通信,并抛出一个IOException异常也可引发MalformedServerReplyException ,这是一个IOException异常子类。 将抛出一个MalformedServerReplyException答复时,从服务器收到的偏离足够的协议规范,它不能在一个有用的方式解释尽管试图尽可能宽松。
上市API的两个例子的目录列表分页和无页数的范例,如下: 无页数(全名单)访问,使用分析器可经自动检测: FTPClient f =new FTPClient(); f.connect(服务器); f.login(用户名,密码);
FTPFile []文件= listfiles <套件(目录);
分页访问,使用分析器无法访问的自动检测。 在应该从
org.apache.commons.net.FTPFileEntryParser派生initateListParsing第一个参数定义的类:
FTPClient f =new FTPClient(); f.connect(服务器); f.login(用户名,密码); FTPListParseEngine引擎=
f.initiateListParsing(“com.whatever.YourOwnParser”,目录);
而(engine.hasNext()){
FTPFile []文件= engine.getNext(25); / /“页面大小”你想要 / /做你想做这些文件,显示它们,等 / /昂贵FTPFile不创建对象,直到需要。 }
分页访问,使用分析器可经自动检测: FTPClient f =new FTPClient(); f.connect(服务器); f.login(用户名,密码);
FTPListParseEngine engine = f.initiateListParsing(目录);
而(engine.hasNext()){
FTPFile []文件= engine.getNext(25); / /“页面大小”你想要 / /做你想做这些文件,显示它们,等 / /昂贵FTPFile不创建对象,直到需要。 }
有关使用服务器上的目录清单FTPClient例子
使用英语以外的语言
? 使用日期格式“以外的美国英语”标准MM d yyyy ? 在不同的时区,你需要在蚁群依赖检查准确的时间戳
?
见FTPClientConfig 。 作者:
丹尼尔楼Savarese,罗里温斯顿 另见:
FTP , FTPConnectionClosedException , FTPFileEntryParser , FTPFileEntryParserFactory , DefaultFTPFileEntryParserFactory , FTPClientConfig , MalformedServerReplyException
字段摘要 static ACTIVE_LOCAL_DATA_CONNECTION_MODE int 一个常量指示期待的FTP会话之间发生的所有传输客户端(本地)和服务器,该服务器应该连接到客户端的数据端口来启动数据传输。 static ACTIVE_REMOTE_DATA_CONNECTION_MODE int 一个常量指示期待的FTP会话的所有转让发生在两个远程服务器,而客户端连接到要连接到其他服务器的数据端口发起数据传输服务器。 static PASSIVE_LOCAL_DATA_CONNECTION_MODE int 一个常量指示期待的FTP会话之间发生的所有传输客户端(本地)和服务器,服务器在被动模式时,要求客户端连接到服务器的数据端口来启动传输。 static PASSIVE_REMOTE_DATA_CONNECTION_MODE int 一个常量指示期待的FTP会话的所有转让发生在两个远程服务器,而客户端连接到处于被动模式,要求其他服务器连接到第一个服务器的数据端口发起数据传输服务器。 org.apache.commons.net.ftp类从继承的字段。 的FTP _commandSupport_ , _controlEncoding , _controlInput_ , _controlOutput_ , _newReplyString , _replyCode , _replyLines , _replyString ,