如何利用jakartacommons中的FTPClient包
时间:2021-04-26

通常情况下,JAVA程序需要与FTP打交道,如将文件上传到FTP服务器,下载文件,本文简要介绍了如何使用FTPClient(在commons-net包中)在jakartacommons中上传下载文件。

使用的jar包包包:

commons-net-1.4.1.jar

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();

 }  

}

以上是本文的全部内容,希望对大家的学习有所帮助。