nosilence 发表于 2015-5-28 13:50:42

使用Commons-net包实现ftp服务器的访问(转)

  项目需要实现从某银行的ftp服务器上定时下载数据文件的模块.于是使用apache的commons-net包实现ftp服务器的链接
  中间使用了commons的io和Oro包.Io包封装了一些使用的方法,eg:安全的关闭各种流.根据文件的长度得到文件的方便识别的大小(k,m.g).还有一些其它使用的方法,读者可以下载后自行研究..
  commons-net包封装了一些常见的网络包:ftp,smtp,pop3等..本文使用了ftp包的功能. 代码如下:

java 代码

import java.io.IOException;   import java.io.OutputStream;   import org.apache.commons.io.FileUtils;   import org.apache.commons.io.IOUtils;   import org.apache.commons.net.ftp.FTPClient;   import org.apache.commons.net.ftp.FTPFile;   /**   * 使用commons的net包进行ftp链接.   * 相关包:commons-net-1.4.1.jar ; commons-io-1.2.jar;jakarta-oro-2.0.8.jar测试通过.可以列出ftp上的文件   * 通过把ftp服务器上的文件流连接到outSteam及可以把文件下载到本机的目录..限制如果目录为中文则需要处理.最好使用英文文件名   * @author xzgf   * email:*
* @create 2007-2-11   *   */public class ListFtpFile {         private FTPClient ftpClient = new FTPClient();            private OutputStream outSteam = null;            /**       * ftp服务器地址       */      private String hostName = "127.0.0.1";            /**       * 登录名       */      private String userName = "1";            /**       * 登录密码       */      private String password = "1";            /**       * 需要访问的远程目录       */      private String remoteDir = "/ClientTest";            /**       * 登录方法       *       */      private void login() {         try {               //链接到ftp服务器               ftpClient.connect(hostName);               System.out.println("连接到ftp服务器:" + hostName + " 成功..开始登录");               //登录.用户名 密码               ftpClient.login(userName, password);               System.out.println("登录成功.");                              FTPFile[] remoteFiles = ftpClient.listFiles(remoteDir);               System.out.println("目录" + remoteDir + "下的文件:");               if(remoteFiles != null) {                   for(int i=0;i                     String name = remoteFiles.getName();                     long length = remoteFiles.getSize();                     String readableLength = FileUtils.byteCountToDisplaySize(length);                     System.out.println(name + ":\t\t" + readableLength);                   }               }                        } catch (Exception e) {               e.printStackTrace();         } finally {               //使用IO包关闭流               IOUtils.closeQuietly(outSteam);               try {                   ftpClient.disconnect();               } catch (IOException ioe) {                   ioe.printStackTrace();               }         }       }            public static void main(String[] args) {         ListFtpFile listFtpfiles = new ListFtpFile();         listFtpfiles.login();       }   
[*]}   
  寥寥几行实现了ftp服务器某个目录下的所有文件.当然本例中没有处理中文的问题,所以如果ftp上存在中文目录,则会出现乱码.
  通过获得ftp的流,可以将文件下载到本地.配合正则表达式,可以实现从服务器上下载匹配规则的文件....
页: [1]
查看完整版本: 使用Commons-net包实现ftp服务器的访问(转)