Java代码实现FTP文件下载

下载commons-net-1.4.1.jar包,放到lib下,并加载到.classpath文件中
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文件用于下载测试

[java] view plain copy
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);  
}  

}

猜你喜欢

转载自blog.csdn.net/weixin_44205185/article/details/85162754