教大家用FTPClient对ftp文件进行上传下载等操作
2013-03-08 16:20
716 查看
package com.ad.util; import org.apache.commons.net.ftp.FTP; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPReply; import org.apache.commons.net.ftp.FTPFile; import org.apache.commons.net.ftp.FTPListParseEngine; import com.ad.adweb.system.GlobalConst; import java.io.InputStream; import java.io.FileOutputStream; import java.io.File; import java.util.Calendar; /** * <p> * Title: FTPUtil * </p> * <p> * Description: FTP操作的工具类,通过此类可以完成文件到指定FTP服务器的上传和下载。 * </p> * <p> * Copyright: Copyright (c) 2007 * </p> * <p> * Company: Routon * </p> * * @author zhihui zhou * @version 1.0 InternalError-->Exception by jiangyl * @2007.12.21 */ public class FTPUtil { /** * 全局配置项: ftp传输模式: passive/active */ //private static String ConfigFtpMode = null; /** * 全局配置项: applet ftp传输模式: passive/active */ //private static String ConfigClientFtpMode = null; /** * ftp服务器的ip地址 */ private String _ftpServer; /** * ftp端口 */ private int _ftpPort; // /** * ftp服务器的有效登陆用户名 */ private String _userName; /** * ftp服务器的有效登陆用户密码 */ private String _password; /** * ftp客户端的对象实例 */ private FTPClient _ftp; /** * ftp mode */ private String FtpMode = null; // public FTPUtil(String ftpServer, String userName, String password) throws Exception // { // try // { // setFTPServer(ftpServer); // setUserName(userName); // setPassword(password); // // // 初始化ftp客户端对象实例 // _ftp = new FTPClient(); // } // catch (Exception ex) // { // throw new Exception(ex.getMessage()); // } // } /** * 构造器 * * @param ftpServer FTP服务器 * String * @param userName 用户名 * String * @param password 密码 * String * @throws Exception 异常 */ public FTPUtil(String ftpServer, int port, String userName, String password) throws Exception { try { setFTPServer(ftpServer); setUserName(userName); setPassword(password); this._ftpPort = port; // 初始化ftp客户端对象实例 _ftp = new FTPClient(); } catch (Exception ex) { throw new Exception(ex.getMessage()); } } /** * 获取ftp服务器的ip地址 * * @return ftpServerIP String */ public String getFTPServer() { return _ftpServer; } /** * 设置ftp服务器的ip地址 * * @param ftpServerIP * String * @throws Exception */ public void setFTPServer(String ftpServer) throws Exception { // 检查输入的ftp服务器地址,不允许为空。 if (ftpServer == null || ftpServer.length() == 0) { throw new Exception("ftp服务器的IP地址不能够为空。"); } _ftpServer = ftpServer; } /** * 获取ftp服务器的用户名 * * @return userName String */ public String getUserName() { return _userName; } /** * 设置ftp服务器的用户名 * * @param userName * String * @throws Exception */ public void setUserName(String userName) throws Exception { // 检查输入的ftp服务器名称,不允许为空。 if (userName == null || userName.length() == 0) { throw new Exception("ftp服务器的登陆用户名不能够为空。"); } _userName = userName; } /** * 获取ftp服务器的用户登陆密码 * * @return password String */ public String getPassword() { return _password; } /** * 设置ftp服务器的用户密码 * * @param password * String * @throws Exception */ public void setPassword(String password) throws Exception { // 检查输入的ftp服务器用户登陆密码,不允许为空。 if (password == null || password.length() == 0) { throw new Exception("ftp服务器的登陆用户密码不能够为空。"); } _password = password; } /** * 上传文件到ftp服务器的指定路径 * * @param ftpPath * 文件上传到ftp的路径 * @param inputStream * 待上传的文件流 * @return isUploadSuccessed ture表示上传成功,发了社表明上传失败。 * @throws Exception */ public boolean UploadFile(String ftpPath, InputStream inputSteam) throws Exception { boolean isSuccessed = false; // 通过指定的用户名和密码登陆ftp服务器 try { if (Login(_userName, _password)) { // 开始上传文件 _ftp.setFileType(FTP.BINARY_FILE_TYPE); if (_ftp.storeFile(ftpPath, inputSteam)) { isSuccessed = true; } else { throw new Exception("文件上传失败!"); } } else { // 登陆失败 isSuccessed = false; throw new Exception("用户" + _userName + "登陆ftp服务器" + _password + "失败。"); } } catch (Exception ex) { throw new Exception(ex.getMessage()); } finally { ftpDispose(); } return isSuccessed; } /** * 在ftp服务器上面创建一个目录 * * @param folderName * 目录名称 * @return boolean 创建结果true表示成功,false表示失败 * @throws Exception */ public boolean CreateFolder(String folderName) throws Exception { boolean isSuccessed = false; // 通过指定的用户名和密码登陆ftp服务器 try { if (Login(_userName, _password)) { // 开始创建指定的目录到ftp服务器上 if (_ftp.makeDirectory(folderName)) { isSuccessed = true; } else { throw new Exception("ftp文件夹创建失败!"); } } else { // 登陆ftp失败 isSuccessed = false; throw new Exception("用户" + _userName + "登陆ftp服务器" + _password + "失败。"); } } catch (Exception ex) { throw new Exception(ex.getMessage()); } finally { ftpDispose(); } return isSuccessed; } /** * 根据指定的用户名和密码登陆ftp服务器 * * @param username * 登陆用户名 * @param password * 登陆用户密码 * @return isUploadSuccessed true表示登陆成功,false表示登陆失败 * @throws Exception */ public boolean Login(String username, String password) throws Exception { boolean isSuccessed = false; try { int reply = 0; // 连接到指定的ftp服务器 _ftp.connect(_ftpServer, this._ftpPort); // 检查ftp连接请求的响应码,确保本次连接请求是成功还是失败。 reply = _ftp.getReplyCode(); if (!FTPReply.isPositiveCompletion(reply)) { _ftp.disconnect(); throw new Exception("FTP服务器拒绝了连接."); } // 根据指定的用户名和密码登陆ftp服务器 if (!_ftp.login(_userName, _password)) { throw new Exception("用户" + _userName + "登陆ftp服务器" + _password + "失败。"); } // set ftp mode setCurrentFtpMode(); isSuccessed = true; } catch (Exception e) { throw new Exception(e.getMessage()); } return isSuccessed; } /** * 设置ftp模式,优先顺序: 1. FtpMode 2. ConfigFtpMode 3. commons-net lib 默认 */ private void setCurrentFtpMode() { String tmpFtpMode = null; if (FtpMode != null && FtpMode.length() > 0) { tmpFtpMode = FtpMode; } else if (GlobalConst.ConfigFtpMode != null && GlobalConst.ConfigFtpMode.length() > 0) { tmpFtpMode = GlobalConst.ConfigFtpMode; } if (tmpFtpMode != null && tmpFtpMode.length() > 0) { if (tmpFtpMode.equalsIgnoreCase("passive")) { _ftp.enterLocalPassiveMode(); } else if (tmpFtpMode.equalsIgnoreCase("active")) { _ftp.enterLocalActiveMode(); } } } /** * 释放ftp客户端 */ public void ftpDispose() { try { // 注销FTP客户端 _ftp.logout(); } catch (Exception e) { // 如果FTP注销失败什么也不做,忽略掉异常。 } // 如果FTP客户端的连接还存在则断开连接。 if (_ftp.isConnected()) { try { _ftp.disconnect(); } catch (Exception ex) { // 如果断开FTP连接失败什么也不做,忽略掉异常。 } } } /** * 从ftp下载文件 * * @param FtpFileName * 来源文件名称 * @param LocaFileName * 目的文件名称 * @return boolean true表示下载文件成功,false表示下载文件失败 * @throws Exception */ public boolean DownFile(String FtpFileName, String LocaFileName) throws Exception { boolean isSuccessed = false; try { if (Login(_userName, _password)) { File file = new File(LocaFileName); FileOutputStream fos = new FileOutputStream(file); // + by jiangyl @2008.7.6 _ftp.setFileType(FTP.BINARY_FILE_TYPE); isSuccessed = _ftp.retrieveFile(FtpFileName, fos); fos.close(); file = null; if (!isSuccessed) { throw new Exception("文件" + FtpFileName + "下载失败."); } } else { isSuccessed = false; throw new Exception("用户" + _userName + "登陆ftp服务器" + _password + "失败。"); } } catch (Exception ex) { throw new Exception(ex.getMessage()); } finally { ftpDispose(); } return isSuccessed; } /** * 提供一静态方法,由外部定时任务模块调用,对FTP服务器上的过期数据文件进行清理 * * @return int 表示成功删除文件的个数 * @throws Exception */ public static void ClearFTPExpiredFiles() throws Exception { com.ad.util.FtpServerInfo ftpServer = com.ad.util.FtpServerInfo.getInstance(); com.ad.util.FTPUtil ftpUtil = new com.ad.util.FTPUtil(ftpServer.getFtp().getFtpIntIP(), ftpServer.getFtp().getPort(), ftpServer.getFtp().getUpName(), ftpServer.getFtp().getUpPWD()); ftpUtil.ClearExpiredFiles(); } /** * 根据web.xml中配置, 对FTP服务器上的过期数据文件进行清理,清理的目录有:playbill、terParam、theme、ThemePolicy * * @return int 表示成功删除文件的个数 * @throws Exception */ public int ClearExpiredFiles() throws Exception { int deleteNum = 0; try { if (Login(_userName, _password)) { deleteNum += DeleteExpiredFiles("playbill"); deleteNum += DeleteExpiredFiles("terParam"); deleteNum += DeleteExpiredFiles("theme"); deleteNum += DeleteExpiredFiles("ThemePolicy"); } else { throw new Exception("用户" + _userName + "登陆ftp服务器" + _password + "失败。"); } } catch (Exception ex) { throw new Exception(ex.getMessage()); } finally { ftpDispose(); } return deleteNum; } /** * 根据web.xml中配置, 对FTP服务器上的过期数据文件进行清理 * * @param FtpPathName * 待清理的目录 * @return int 表示成功删除文件的个数 * @throws Exception */ private int DeleteExpiredFiles(String FtpPathName) throws Exception { boolean isSuccessed = false; int deleteNum = 0; Calendar dtNow = Calendar.getInstance(); Calendar dt = null; FTPFile[] files = null; long t1 = System.currentTimeMillis(); long t2 = -1; try { // _ftp.changeWorkingDirectory("ThemePolicy"); // String[] names = _ftp.listNames(); // Paged access, using a parser accessible by auto-detect: FTPListParseEngine engine = _ftp.initiateListParsing(FtpPathName); while (engine.hasNext()) { files = engine.getNext(25); // "page size" you want for (int i = 0; i < files.length; i++) { // System.out.println(files[i].getName()+" -- "+FastDateFormat.getInstance("yyyy-MM-dd // HH:mm:ss").format(files[i].getTimestamp())); dt = files[i].getTimestamp(); dt.add(Calendar.MONTH, com.ad.adweb.system.ClearExpiredDataDao.ExpiredDataMonthDiff); // FTP服务器中保留最近多少个月的数据,默认为1个月 if (dt.compareTo(dtNow) <= 0) { isSuccessed = _ftp.deleteFile(FtpPathName + "/" + files[i].getName()); if (isSuccessed) { deleteNum++; //System.out.println("deleteFile OK! -- " + files[i].getName() + " -- " + FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ss").format(dt)); } } }// for } } catch (Exception ex) { throw new Exception(ex.getMessage()); } t2 = System.currentTimeMillis(); System.out.println("FTP服务器过期数据文件清理 -- " + FtpPathName + " 目录," + deleteNum + " 个文件已删除,用时 " + (t2 - t1) + " ms!"); return deleteNum; } /** * 获取FtpMode * @return String FtpMode */ public String getFtpMode() { return FtpMode; } /** * 设置FtpMode * @param ftpMode FtpMode */ public void setFtpMode(String ftpMode) { FtpMode = ftpMode; } // /** // * 获取ConfigClientFtpMode // * @return String ConfigClientFtpMode // */ // public static String getConfigClientFtpMode() // { // return ConfigClientFtpMode; // } // // /** // * 设置ConfigClientFtpMode // * @param configClientFtpMode ConfigClientFtpMode // */ // public static void setConfigClientFtpMode(String configClientFtpMode) // { // ConfigClientFtpMode = configClientFtpMode; // } // // /** // * 获取ConfigFtpMode // * @return String ConfigFtpMode // */ // public static String getConfigFtpMode() // { // return ConfigFtpMode; // } // // /** // * 设置ConfigFtpMode // * @param configFtpMode ConfigFtpMode // */ // public static void setConfigFtpMode(String configFtpMode) // { // ConfigFtpMode = configFtpMode; // } }// END
相关文章推荐
- 用FTPClient对ftp文件进行上传下载等操作
- Apache FTPClient操作文件上传下载及公共类
- 使用FTPClient进行文件服务器内文件的上传和下载
- 如何在Webstorm/Phpstorm中设置连接FTP,并快速进行文件比较,上传下载,同步等操作
- FTPClientHelper辅助类 实现文件上传,目录操作,下载等操作
- 【C#公共帮助类】FTPClientHelper帮助类,实现文件上传,目录操作,下载等动作
- Webstorm/Phpstorm中设置连接FTP,并快速进行文件比较,上传下载,同步等操作
- 如何在Webstorm/Phpstorm中设置连接FTP,并快速进行文件比较,上传下载,同步等操作
- 如何在Webstorm/Phpstorm中设置连接FTP,并快速进行文件比较,上传下载,同步等操作
- C# FTPClientHelper共公类 实现文件上传,目录操作,下载等动作
- 如何在Webstorm/Phpstorm中设置连接FTP,并快速进行文件比较,上传下载,同步等操作
- 在Webstorm/Phpstorm中设置连接FTP,并快速进行文件比较,上传下载,同步等操作
- 如何在Webstorm/Phpstorm中设置连接FTP,并快速进行文件比较,上传下载,同步等操作(远程开发)
- 如何在Webstorm/Phpstorm中设置连接FTP,并快速进行文件比较,上传下载,同步等操作
- C# FTPClient--FTP操作帮助类,上传下载,文件,目录操作
- C# FTPClient--FTP操作帮助类,上传下载,文件,目录操作
- 如何在Webstorm/Phpstorm中设置连接FTP,并快速进行文件比较,上传下载,同步等操作
- 如何在Webstorm/Phpstorm中设置连接FTP,并快速进行文件比较,上传下载,同步等操作
- C# FTPClient--FTP操作帮助类,上传下载,文件,目录操作
- 如何在Webstorm/Phpstorm中设置连接FTP,并快速进行文件比较,上传下载,同步等操作