JAVA中使用FTPClient实现文件上传下载

openkk 12年前

    在JAVA程序中,经常需要和FTP打交道,比如向FTP服务器上传文件、下载文件,本文简单介绍如何利用jakarta commons中的FTPClient(在commons-net包中)实现上传下载文件。

  1. 所用到的jar包有:  
  2. commons-net-1.4.1.jar  
  3. jakarta-oro.jar 
一、上传文件
    文件上传源代码                    /**              * Description: 向FTP服务器上传文件              * @Version1.0              * @param url FTP服务器hostname              * @param port FTP服务器端口              * @param username FTP登录账号              * @param password FTP登录密码              * @param path FTP服务器保存目录              * @param filename 上传到FTP服务器上的文件名              * @param input 输入流              * @return 成功返回true,否则返回false              */              public static boolean uploadFile(                    String url,//FTP服务器hostname                     int port,//FTP服务器端口                    String username, // FTP登录账号                     String password, //FTP登录密码                    String path, //FTP服务器保存目录                    String filename, //上传到FTP服务器上的文件名                     InputStream input // 输入流                     ) {                  boolean success = false;                  FTPClient ftp = new FTPClient();                  try {                      int reply;                      ftp.connect(url, port);//连接FTP服务器                       //如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器                       ftp.login(username, password);//登录                       reply = ftp.getReplyCode();                      if (!FTPReply.isPositiveCompletion(reply)) {                          ftp.disconnect();                          return success;                      }                      ftp.changeWorkingDirectory(path);                      ftp.storeFile(filename, input);                                                     input.close();                      ftp.logout();                      success = true;                  } catch (IOException e) {                      e.printStackTrace();                  } finally {                      if (ftp.isConnected()) {                          try {                              ftp.disconnect();                          } catch (IOException ioe) {                          }                      }                  }                  return success;              }   
以下是文件上传的测试用例:
    /**         * 将本地文件上传到FTP服务器上         *         */        public void testUpLoadFromDisk(){              try {                  FileInputStream in=new FileInputStream(new File("D:/test.txt"));                  boolean flag = uploadFile("127.0.0.1", 21, "administrator", "zyuc2011", "test", "test.txt", in);                  System.out.println(flag);              } catch (FileNotFoundException e) {                  e.printStackTrace();              }           }  
    /**         * 在FTP服务器上生成一个文件,并将一个字符串写入到该文件中         *         */        public void testUpLoadFromString(){              try {                  String str = "这是要写入的字符串!";                InputStream input = new ByteArrayInputStream(str.getBytes("utf-8"));                  boolean flag = uploadFile("127.0.0.1", 21, "administrator", "zyuc2011", "test", "test.txt", input);                  System.out.println(flag);              } catch (UnsupportedEncodingException e) {                  e.printStackTrace();              }          }  
二、文件下载
文件下载源代码        /**          * Description: 从FTP服务器下载文件          * @Version1.0          * @param url FTP服务器hostname          * @param port FTP服务器端口          * @param username FTP登录账号          * @param password FTP登录密码          * @param remotePath FTP服务器上的相对路径          * @param fileName 要下载的文件名          * @param localPath 下载后保存到本地的路径          * @return          */          public static boolean downFile(                String url, //FTP服务器hostname                int port,//FTP服务器端口                String username, //FTP登录账号                String password, //FTP登录密码                String remotePath,//FTP服务器上的相对路径                 String fileName,//要下载的文件名                String localPath//下载后保存到本地的路径                ) {              boolean success = false;              FTPClient ftp = new FTPClient();              try {                  int reply;                  ftp.connect(url, port);                  //如果采用默认端口,可以使用ftp.connect(url)的方式直接连接FTP服务器                   ftp.login(username, password);//登录                   reply = ftp.getReplyCode();                  if (!FTPReply.isPositiveCompletion(reply)) {                      ftp.disconnect();                      return success;                  }                  ftp.changeWorkingDirectory(remotePath);//转移到FTP服务器目录                   FTPFile[] fs = ftp.listFiles();                  for(FTPFile ff:fs){                      if(ff.getName().equals(fileName)){                          File localFile = new File(localPath+"/"+ff.getName());                          OutputStream is = new FileOutputStream(localFile);                           ftp.retrieveFile(ff.getName(), is);                          is.close();                      }                  }                                    ftp.logout();                  success = true;              } catch (IOException e) {                  e.printStackTrace();              } finally {                  if (ftp.isConnected()) {                      try {                          ftp.disconnect();                      } catch (IOException ioe) {                      }                  }              }              return success;          }  
以下是文件下载的测试用例:
    /**         * 将FTP服务器上文件下载到本地         *         */        public void testDownFile(){            try {                  boolean flag = downFile("127.0.0.1", 21, "administrator", "zyuc2011", "test", "test.txt", "D:/");                  System.out.println(flag);              } catch (Exception e) {                  e.printStackTrace();              }               }