Jakarta Commons
reference:http://www.informit.com/guides/content.asp?g=java&seqNum=40尽管jakarta apache组织发布了大量的开放源码的项目,但是最受欢迎、应用最广泛的恐怕要数Tomcat Servlet engine了。如果你曾经实施过类似FTP,Telnet,SMTP,pop3和NNTP这些互联网协议的话,你就会知道检查这些协议具体实施中的错误是何等的困难。不过现在你不用担心这个问题了,apache组织推出的Commons/Nets库使我们从这些协议的具体实施中脱离出来,我们再也不需要绞尽脑汁为实现某个协议而彻夜不眠了。Commons/Nets库包括下面几种协议:
Finger
Whois
TFTP
Telnet
Pop3
FTP
NNTP
SMTP
还有其它一些像Time和Echo这样的协议。
Commons/Net库的目标就是为程序员提供一个通用、跨平台并易于使用的互联网协议族。如果您非常熟悉这些协议,那么您的知识将非常有助于您对Commons/Net库中一系列API的理解,如果您不是很了解这些协议的话,没关系,这些API将有助于您对协议的了解。
下面分别介绍如何使用Commons/Net库中的API来实现我们所要的功能。首先介绍FTP(File Transfer Protocol)协议
File Transfer Protocol
分布式系统中,从一台机器向另一台机器传输文件是一项非常常见的任务。我们经常使用FTP工具连接到一台远程服务器上,找到所要的文件并下载到本地机器上。一个FTP会话过程如下所示
C:\> ftp 192.168.1.99
Connected to 192.168.1.99.
220 WGB01 FTP server (Version wu-2.6.2-5) ready.
User (192.168.1.99:(none)): myusername
331 Password required for myusername.
Password:
230 User myusername logged in.
ftp> cd /apps/mydir
ftp> ls
200 PORT command successful.
150 Opening ASCII mode data connection for directory listing.
total 6160
-rw-r--r--1 501 100 3147032 Mar 31 13:37 myfile.pdf
226 Transfer complete.
ftp: 101 bytes received in 0.58Seconds 0.17Kbytes/sec.
ftp> lcd c:\download
ftp> bin
ftp> get myfile.pdf
大致经历了下面几个步骤:
1.连接服务器
2.输入用户名、密码登录
3.改变访问文件夹"/apps/mydir" (cd)
4.获得文件列表
5.改变本地文件夹路径
6.设定传输模式为binary
7.下载myfile.pdf文件
上面的每一个步骤都需要FTP 客户端和FTP服务器端的相互交互,每个步骤都需要进行错误检查。
下面是一段使用Commons/Net库,利用FTP协议从服务器下载文件的代码
import org.apache.commons.net.ftp.*;
public static void getDataFiles( String server,String username,String password,
String folder,String destinationFolder,Calendar start,Calendar end )
{
try
{
// Connect and logon to FTP Server
FTPClient ftp = new FTPClient();//FTPClient对象拥有客户端的各种方法
ftp.connect( server );
ftp.login( username, password );
System.out.println("Connected to " + server + ".");
System.out.print(ftp.getReplyString());
// List the files in the directory
ftp.changeWorkingDirectory( folder );
FTPFile[] files = ftp.listFiles();
System.out.println( "Number of files in dir: " + files.length );
DateFormat df = DateFormat.getDateInstance( DateFormat.SHORT );
for( int i=0; i= 0 &&
fileDate.compareTo( end.getTime() )
页:
[1]