一:下载commons-net-1.4.1.jar包,放到lib下,并加载到.classpath文件中
二:编写工具类FtpUtil.Java如下
- package common;
- import java.io.File;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.OutputStream;
- import java.net.SocketException;
- import java.util.Properties;
- import org.apache.log4j.Logger;
- import org.apache.commons.logging.Log;
- import org.apache.commons.logging.LogFactory;
- import org.apache.commons.net.ftp.*;
- public class FtpUtil {
- private final static Log logger = LogFactory.getLog(FtpUtil.class);
- /**
- * 获取FTPClient对象
- *
- * @param ftpHost
- * FTP主机服务器
- * @param ftpPassword
- * FTP 登录密码
- * @param ftpUserName
- * FTP登录用户名
- * @param ftpPort
- * FTP端口 默认为21
- * @return
- */
- public static FTPClient getFTPClient(String ftpHost, String ftpUserName,
- String ftpPassword, int ftpPort) {
- FTPClient ftpClient = new FTPClient();
- try {
- ftpClient = new FTPClient();
- ftpClient.connect(ftpHost, ftpPort);// 连接FTP服务器
- ftpClient.login(ftpUserName, ftpPassword);// 登陆FTP服务器
- if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {
- logger.info("未连接到FTP,用户名或密码错误。");
- ftpClient.disconnect();
- } else {
- logger.info("FTP连接成功。");
- }
- } catch (SocketException e) {
- e.printStackTrace();
- logger.info("FTP的IP地址可能错误,请正确配置。");
- } catch (IOException e) {
- e.printStackTrace();
- logger.info("FTP的端口错误,请正确配置。");
- }
- return ftpClient;
- }
- /*
- * 从FTP服务器下载文件
- *
- * @param ftpHost FTP IP地址
- *
- * @param ftpUserName FTP 用户名
- *
- * @param ftpPassword FTP用户名密码
- *
- * @param ftpPort FTP端口
- *
- * @param ftpPath FTP服务器中文件所在路径 格式: ftptest/aa
- *
- * @param localPath 下载到本地的位置 格式:H:/download
- *
- * @param fileName 文件名称
- */
- public static void downloadFtpFile(String ftpHost, String ftpUserName,
- String ftpPassword, int ftpPort, String ftpPath, String localPath,
- String fileName) {
- FTPClient ftpClient = null;
- try {
- ftpClient = getFTPClient(ftpHost, ftpUserName, ftpPassword, ftpPort);
- ftpClient.setControlEncoding("UTF-8"); // 中文支持
- ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
- ftpClient.enterLocalPassiveMode();
- ftpClient.changeWorkingDirectory(ftpPath);
- File localFile = new File(localPath + File.separatorChar + fileName);
- OutputStream os = new FileOutputStream(localFile);
- ftpClient.retrieveFile(fileName, os);
- os.close();
- ftpClient.logout();
- } catch (FileNotFoundException e) {
- logger.error("没有找到" + ftpPath + "文件");
- e.printStackTrace();
- } catch (SocketException e) {
- logger.error("连接FTP失败.");
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- logger.error("文件读取错误。");
- e.printStackTrace();
- }
- }
- }
三、测试代码
假设已经存在一个FTP服务器,登录的用户名和密码为zyf,端口为22,登后的家目录下进入ftpdir目录,下面有一个11.txt文件用于下载测试
- package scripts.testscript;
- import org.testng.annotations.Test;
- import common.FtpUtil;
- public class FtpDownloadTestScript {
- @Test
- public void run() {
- String ftpHost = "192.168.26.132";
- String ftpUserName = "zyf";
- String ftpPassword = "zyf";
- int ftpPort = 21;
- String ftpPath = "ftpdir/";
- String localPath = "H:/download";
- String fileName = "11.txt";
- FtpUtil.downloadFtpFile(ftpHost, ftpUserName, ftpPassword, ftpPort, ftpPath, localPath, fileName);
- }
- }