首页 > 代码库 > apache-commons-net Ftp 进行文件、文件夹的上传下载及日志的输出

apache-commons-net Ftp 进行文件、文件夹的上传下载及日志的输出

用到了apache 的 commons-net-3.0.1.jar 和 log4j-1.2.15.jar 这连个jar包

JAVA 代码如下:

  1 package com.bjut.edu.cn.ftp;  2   3 import java.io.BufferedInputStream;  4 import java.io.BufferedOutputStream;  5 import java.io.File;  6 import java.io.FileInputStream;  7 import java.io.FileNotFoundException;  8 import java.io.FileOutputStream;  9 import java.io.IOException; 10 import java.util.TimeZone; 11 import org.apache.commons.net.ftp.FTPClient; 12 import org.apache.commons.net.ftp.FTPClientConfig; 13 import org.apache.commons.net.ftp.FTPFile; 14 import org.apache.commons.net.ftp.FTPReply; 15  16 import org.apache.log4j.Logger; 17  18 public class Ftp { 19     private FTPClient ftpClient; 20     private String strIp; 21     private int intPort; 22     private String user; 23     private String password; 24  25     private static Logger logger = Logger.getLogger(Ftp.class.getName()); 26  27     /* * 28      * Ftp构造函数 29      */ 30     public Ftp(String strIp, int intPort, String user, String Password) { 31         this.strIp = strIp; 32         this.intPort = intPort; 33         this.user = user; 34         this.password = Password; 35         this.ftpClient = new FTPClient(); 36     } 37     /** 38      * @return 判断是否登入成功 39      * */ 40     public boolean ftpLogin() { 41         boolean isLogin = false; 42         FTPClientConfig ftpClientConfig = new FTPClientConfig(); 43         ftpClientConfig.setServerTimeZoneId(TimeZone.getDefault().getID()); 44         this.ftpClient.setControlEncoding("GBK"); 45         this.ftpClient.configure(ftpClientConfig); 46         try { 47             if (this.intPort > 0) { 48                 this.ftpClient.connect(this.strIp, this.intPort); 49             } else { 50                 this.ftpClient.connect(this.strIp); 51             } 52             // FTP服务器连接回答 53             int reply = this.ftpClient.getReplyCode(); 54             if (!FTPReply.isPositiveCompletion(reply)) { 55                 this.ftpClient.disconnect(); 56                 logger.error("登录FTP服务失败!"); 57                 return isLogin; 58             } 59             this.ftpClient.login(this.user, this.password); 60             // 设置传输协议 61             this.ftpClient.enterLocalPassiveMode(); 62             this.ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE); 63             logger.info("恭喜" + this.user + "成功登陆FTP服务器"); 64             isLogin = true; 65         } catch (Exception e) { 66             e.printStackTrace(); 67             logger.error(this.user + "登录FTP服务失败!" + e.getMessage()); 68         } 69         this.ftpClient.setBufferSize(1024 * 2); 70         this.ftpClient.setDataTimeout(30 * 1000); 71         return isLogin; 72     } 73  74     /** 75      * @退出关闭服务器链接 76      * */ 77     public void ftpLogOut() { 78         if (null != this.ftpClient && this.ftpClient.isConnected()) { 79             try { 80                 boolean reuslt = this.ftpClient.logout();// 退出FTP服务器 81                 if (reuslt) { 82                     logger.info("成功退出服务器"); 83                 } 84             } catch (IOException e) { 85                 e.printStackTrace(); 86                 logger.warn("退出FTP服务器异常!" + e.getMessage()); 87             } finally { 88                 try { 89                     this.ftpClient.disconnect();// 关闭FTP服务器的连接 90                 } catch (IOException e) { 91                     e.printStackTrace(); 92                     logger.warn("关闭FTP服务器的连接异常!"); 93                 } 94             } 95         } 96     } 97  98     /*** 99      * 上传Ftp文件100      * @param localFile 当地文件101      * @param romotUpLoadePath上传服务器路径 - 应该以/结束102      * */103     public boolean uploadFile(File localFile, String romotUpLoadePath) {104         BufferedInputStream inStream = null;105         boolean success = false;106         try {107             this.ftpClient.changeWorkingDirectory(romotUpLoadePath);// 改变工作路径108             inStream = new BufferedInputStream(new FileInputStream(localFile));109             logger.info(localFile.getName() + "开始上传.....");110             success = this.ftpClient.storeFile(localFile.getName(), inStream);111             if (success == true) {112                 logger.info(localFile.getName() + "上传成功");113                 return success;114             }115         } catch (FileNotFoundException e) {116             e.printStackTrace();117             logger.error(localFile + "未找到");118         } catch (IOException e) {119             e.printStackTrace();120         } finally {121             if (inStream != null) {122                 try {123                     inStream.close();124                 } catch (IOException e) {125                     e.printStackTrace();126                 }127             }128         }129         return success;130     }131 132     /***133      * 下载文件134      * @param remoteFileName   待下载文件名称135      * @param localDires 下载到当地那个路径下136      * @param remoteDownLoadPath remoteFileName所在的路径137      * */138 139     public boolean downloadFile(String remoteFileName, String localDires,140             String remoteDownLoadPath) {141         String strFilePath = localDires + remoteFileName;142         BufferedOutputStream outStream = null;143         boolean success = false;144         try {145             this.ftpClient.changeWorkingDirectory(remoteDownLoadPath);146             outStream = new BufferedOutputStream(new FileOutputStream(147                     strFilePath));148             logger.info(remoteFileName + "开始下载....");149             success = this.ftpClient.retrieveFile(remoteFileName, outStream);150             if (success == true) {151                 logger.info(remoteFileName + "成功下载到" + strFilePath);152                 return success;153             }154         } catch (Exception e) {155             e.printStackTrace();156             logger.error(remoteFileName + "下载失败");157         } finally {158             if (null != outStream) {159                 try {160                     outStream.flush();161                     outStream.close();162                 } catch (IOException e) {163                     e.printStackTrace();164                 }165             }166         }167         if (success == false) {168             logger.error(remoteFileName + "下载失败!!!");169         }170         return success;171     }172 173     /***174      * @上传文件夹175      * @param localDirectory176      *            当地文件夹177      * @param remoteDirectoryPath178      *            Ftp 服务器路径 以目录"/"结束179      * */180     public boolean uploadDirectory(String localDirectory,181             String remoteDirectoryPath) {182         File src = http://www.mamicode.com/new File(localDirectory);183         try {184             remoteDirectoryPath = remoteDirectoryPath + src.getName() + "/";185             this.ftpClient.makeDirectory(remoteDirectoryPath);186             // ftpClient.listDirectories();187         } catch (IOException e) {188             e.printStackTrace();189             logger.info(remoteDirectoryPath + "目录创建失败");190         }191         File[] allFile = src.listFiles();192         for (int currentFile = 0; currentFile < allFile.length; currentFile++) {193             if (!allFile[currentFile].isDirectory()) {194                 String srcName = allFile[currentFile].getPath().toString();195                 uploadFile(new File(srcName), remoteDirectoryPath);196             }197         }198         for (int currentFile = 0; currentFile < allFile.length; currentFile++) {199             if (allFile[currentFile].isDirectory()) {200                 // 递归201                 uploadDirectory(allFile[currentFile].getPath().toString(),202                         remoteDirectoryPath);203             }204         }205         return true;206     }207 208     /***209      * @下载文件夹210      * @param localDirectoryPath本地地址211      * @param remoteDirectory 远程文件夹212      * */213     public boolean downLoadDirectory(String localDirectoryPath,String remoteDirectory) {214         try {215             String fileName = new File(remoteDirectory).getName();216             localDirectoryPath = localDirectoryPath + fileName + "//";217             new File(localDirectoryPath).mkdirs();218             FTPFile[] allFile = this.ftpClient.listFiles(remoteDirectory);219             for (int currentFile = 0; currentFile < allFile.length; currentFile++) {220                 if (!allFile[currentFile].isDirectory()) {221                     downloadFile(allFile[currentFile].getName(),localDirectoryPath, remoteDirectory);222                 }223             }224             for (int currentFile = 0; currentFile < allFile.length; currentFile++) {225                 if (allFile[currentFile].isDirectory()) {226                     String strremoteDirectoryPath = remoteDirectory + "/"+ allFile[currentFile].getName();227                     downLoadDirectory(localDirectoryPath,strremoteDirectoryPath);228                 }229             }230         } catch (IOException e) {231             e.printStackTrace();232             logger.info("下载文件夹失败");233             return false;234         }235         return true;236     }237     // FtpClient的Set 和 Get 函数238     public FTPClient getFtpClient() {239         return ftpClient;240     }241     public void setFtpClient(FTPClient ftpClient) {242         this.ftpClient = ftpClient;243     }244     245     public static void main(String[] args) throws IOException {246         Ftp ftp=new Ftp("10.3.15.1",21,"ghips","ghipsteam");247         ftp.ftpLogin();248         //上传文件夹249         ftp.uploadDirectory("d://DataProtemp", "/home/data/");250         //下载文件夹251         ftp.downLoadDirectory("d://tmp//", "/home/data/DataProtemp");252         ftp.ftpLogOut();        253     }254 }

 

apache-commons-net Ftp 进行文件、文件夹的上传下载及日志的输出