zoukankan      html  css  js  c++  java
  • Java代码实现FTP单个文件下载(二)

    一:下载commons-net-1.4.1.jar包,放到lib下,并加载到.classpath文件中

    二:编写工具类FtpUtil.Java如下

    1. package common;  
    2.   
    3. import java.io.File;    
    4. import java.io.FileNotFoundException;    
    5. import java.io.FileOutputStream;    
    6. import java.io.IOException;    
    7. import java.io.OutputStream;    
    8. import java.net.SocketException;    
    9. import java.util.Properties;  
    10. import org.apache.log4j.Logger;  
    11. import org.apache.commons.logging.Log;  
    12. import org.apache.commons.logging.LogFactory;  
    13. import org.apache.commons.net.ftp.*;  
    14.   
    15.   
    16. public class FtpUtil {  
    17.   
    18.     private final static Log logger = LogFactory.getLog(FtpUtil.class);  
    19.   
    20.     /** 
    21.      * 获取FTPClient对象 
    22.      * 
    23.      * @param ftpHost 
    24.      *            FTP主机服务器 
    25.      * @param ftpPassword 
    26.      *            FTP 登录密码 
    27.      * @param ftpUserName 
    28.      *            FTP登录用户名 
    29.      * @param ftpPort 
    30.      *            FTP端口 默认为21 
    31.      * @return 
    32.      */  
    33.     public static FTPClient getFTPClient(String ftpHost, String ftpUserName,  
    34.             String ftpPassword, int ftpPort) {  
    35.         FTPClient ftpClient = new FTPClient();  
    36.         try {  
    37.             ftpClient = new FTPClient();  
    38.             ftpClient.connect(ftpHost, ftpPort);// 连接FTP服务器  
    39.             ftpClient.login(ftpUserName, ftpPassword);// 登陆FTP服务器  
    40.             if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {  
    41.                 logger.info("未连接到FTP,用户名或密码错误。");  
    42.                 ftpClient.disconnect();  
    43.             } else {  
    44.                 logger.info("FTP连接成功。");  
    45.             }  
    46.         } catch (SocketException e) {  
    47.             e.printStackTrace();  
    48.             logger.info("FTP的IP地址可能错误,请正确配置。");  
    49.         } catch (IOException e) {  
    50.             e.printStackTrace();  
    51.             logger.info("FTP的端口错误,请正确配置。");  
    52.         }  
    53.         return ftpClient;  
    54.     }  
    55.   
    56.     /* 
    57.      * 从FTP服务器下载文件 
    58.      *  
    59.      * @param ftpHost FTP IP地址 
    60.      *  
    61.      * @param ftpUserName FTP 用户名 
    62.      *  
    63.      * @param ftpPassword FTP用户名密码 
    64.      *  
    65.      * @param ftpPort FTP端口 
    66.      *  
    67.      * @param ftpPath FTP服务器中文件所在路径 格式: ftptest/aa 
    68.      *  
    69.      * @param localPath 下载到本地的位置 格式:H:/download 
    70.      *  
    71.      * @param fileName 文件名称 
    72.      */  
    73.     public static void downloadFtpFile(String ftpHost, String ftpUserName,  
    74.             String ftpPassword, int ftpPort, String ftpPath, String localPath,  
    75.             String fileName) {  
    76.   
    77.         FTPClient ftpClient = null;  
    78.   
    79.         try {  
    80.             ftpClient = getFTPClient(ftpHost, ftpUserName, ftpPassword, ftpPort);  
    81.             ftpClient.setControlEncoding("UTF-8"); // 中文支持  
    82.             ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);  
    83.             ftpClient.enterLocalPassiveMode();  
    84.             ftpClient.changeWorkingDirectory(ftpPath);  
    85.   
    86.             File localFile = new File(localPath + File.separatorChar + fileName);  
    87.             OutputStream os = new FileOutputStream(localFile);  
    88.             ftpClient.retrieveFile(fileName, os);  
    89.             os.close();  
    90.             ftpClient.logout();  
    91.   
    92.         } catch (FileNotFoundException e) {  
    93.             logger.error("没有找到" + ftpPath + "文件");  
    94.             e.printStackTrace();  
    95.         } catch (SocketException e) {  
    96.             logger.error("连接FTP失败.");  
    97.             e.printStackTrace();  
    98.         } catch (IOException e) {  
    99.             e.printStackTrace();  
    100.             logger.error("文件读取错误。");  
    101.             e.printStackTrace();  
    102.         }  
    103.   
    104.     }  
    105.   
    106.   
    107.   
    108. }  

    三、测试代码

    假设已经存在一个FTP服务器,登录的用户名和密码为zyf,端口为22,登后的家目录下进入ftpdir目录,下面有一个11.txt文件用于下载测试

    1. package scripts.testscript;  
    2.   
    3. import org.testng.annotations.Test;  
    4.   
    5. import common.FtpUtil;  
    6.   
    7. public class FtpDownloadTestScript {  
    8.     @Test  
    9.     public void run() {  
    10.           
    11.         String ftpHost = "192.168.26.132";  
    12.         String ftpUserName = "zyf";  
    13.         String ftpPassword = "zyf";  
    14.         int ftpPort = 21;  
    15.         String ftpPath = "ftpdir/";  
    16.         String localPath = "H:/download";  
    17.         String fileName = "11.txt";  
    18.         FtpUtil.downloadFtpFile(ftpHost, ftpUserName, ftpPassword, ftpPort, ftpPath, localPath, fileName);  
    19.     }  
    20. }  
  • 相关阅读:
    centos7.6 使用yum安装mysql5.7
    解决hadoop本地库问题
    docker-compose 启动警告
    docker 安装zabbix5.0 界面乱码问题解决
    docker 部署zabbix问题
    zookeeper 超时问题
    hbase regionserver异常宕机
    (转载)hadoop 滚动升级
    hadoop Requested data length 86483783 is longer than maximum configured RPC length
    zkfc 异常退出问题,报错Received stat error from Zookeeper. code:CONNECTIONLOSS
  • 原文地址:https://www.cnblogs.com/gaoxuewei/p/6646689.html
Copyright © 2011-2022 走看看