首页 > 代码库 > 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 进行文件、文件夹的上传下载及日志的输出
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。