Java Ftp

Java Ftp

想为新作的Blog客户端 易博增加FTP上传的功能,最省地的方法当然是利用JDK里的Socket类自己处理FTP的协议,虽然FTP不算是很复杂的协议,但是实现起来还是有点麻烦,容易出错。当然不如使用现成的工具库来得省事可靠。

Java World上有篇比较支持FTP协议的Java工具库的文章,写得很全面。
          Java FTP client libraries reviewed

粗略看了一边,决定选择 The Jakarta Project, Jakarta Commons/Net。Common Net是Jakarta Commons下的一个子项目,支持包括FTP在内的多种Internet协议, 其他有比如Finger, Whois,Telnet,POP3等等。

Common Net支持FTP的关键类是org.apache.commons.net.ftp.FTPClient. 下面介绍一些具体的使用方法。

1. 使用FTPClient连接和登录FTP服务器

  1. FTPClient ftp = new FTPClient();   
  2. ftp.connect(server);   
  3. ftp.login(username, password);   
  4. System.out.println("Connected to " + server + ".");   
  5. System.out.print(ftp.getReplyString());  

类似使用ftp命令登录FTP服务器以后,可以执行各种命令比如cd和ls,可以调用FTPClient的函数比如FTPClient.changeWorkingDirectory(folder); 改变当前目录, FTPClient.listFiles()枚举当前目录下的所有文件。

2. 使用FTPClient下载文件
  1. FTPFile[] files = ftp.listFiles();   
  2. System.out.println("Number of files in dir: " + files.length);   
  3. for (int i = 0; i < files.length; i++) {   
  4.     File file = new File(destinationFolder + File.separator   
  5.                     + files[i].getName());   
  6.     FileOutputStream fos = new FileOutputStream(file);   
  7.     ftp.retrieveFile(files[i].getName(), fos);   
  8.     fos.close();   
  9.     file.setLastModified(fileDate.getTime());   
  10. }  

FTPClient.retrieveFile从FTP服务器上取回一个文件。其实我更关心的是上传的功能。

3. 使用FTPClient上传文件
  1. FileInputStream fis = new FileInputStream(localFileName);   
  2. ftp.storeFile(remoteFileName, fis);  

和retrieveFile相对应的storeFile上传一个本地文件。完事后别忘了关闭FTPClient。

4. 关闭FTPClient
  1. ftp.logout();   
  2. ftp.disconnect();  

简洁起见,以上的代码忽略了错误处理。FTPClient还支持其他一些函数,比如makeDirectory(String pathname) 在服务器上新建一个目录。rename(String from, String to) 改变一个文件的名字。 具体的请参照Commons Net的API文档。

易博客户端介绍

你可能感兴趣的:(Java Ftp)