?
涉及jar包:jftp.jar,jftp-bin-0_70.jar,log4j.jar(見Socket使用之Ftp上傳工具類)
上傳見:Socket使用之Ftp上傳工具類,除了FtpDownloadUtils.java之外,其他java文件和上傳都一樣
1,FtpBaseUtils.java,主要作用獲取IP,Port,username,password等等公共配置信息
import java.io.File; import java.net.InetSocketAddress; import java.net.Socket; import java.net.SocketAddress; import org.apache.log4j.Logger; import com.xxx.vo.FtpVO; import cz.dhl.ftp.Ftp; import cz.dhl.ftp.FtpConnect; public class FtpBaseUtils { private static final Logger logger = Logger.getLogger(FtpUploadUtils.class); private static final FtpVO ftpVo = new FtpVO(); static { ftpVo.setIp(PropertiesUtil.getValue("FTP.IP")); ftpVo.setPort(PropertiesUtil.getValue("FTP.PORT")); ftpVo.setUser(PropertiesUtil.getValue("FTP.USER")); ftpVo.setPassword(PropertiesUtil.getValue("FTP.PASSWORD")); ftpVo.setFtpDir(PropertiesUtil.getValue("FTP.DIR.TASKFile"));// ftp文件存放目錄 ftpVo.setLocalDir(FileUtils.getTaskFilePath());// 本地文件目錄 } public FtpBaseUtils() { super(); } /** * 取得ftp連接實例 * * @param ftpVo * ftp連接信息 * @return Ftp cz.dhl.ftp.Ftp實例 */ protected static Ftp getFtpInstance(FtpVO ftpVo) { Ftp ftp = new Ftp(); try { String ftpIp = ftpVo.getIp(); String ftpUser = ftpVo.getUser(); String ftpPsw = ftpVo.getPassword(); Integer ftpPort = Integer.valueOf(ftpVo.getPort()); logger.info("測試連接,ftp信息:" + ftpVo.toString()); try { // 測試是否能連接ftp服務器,如果沒有連接,返回失敗信息 Socket client = new Socket(); System.out.println("ftp 連接開始.."); SocketAddress addr = new InetSocketAddress(ftpIp, ftpPort); // 連接5秒后無法連接,返回失敗信息 client.connect(addr, 1500); // 超時時間為1.5秒 System.out.println("ftp 斷開連接.."); client.close(); } catch (Exception e) { // TODO: handle exception throw new Exception("ftp鏈接失敗:" + e.getMessage()); } /* connect & login to host */ FtpConnect ftpConn = FtpConnect.newConnect("ftp://" + ftpIp); ftpConn.setUserName(ftpUser); ftpConn.setPassWord(ftpPsw); ftpConn.setPortNum(ftpPort); ftp.connect(ftpConn); } catch (Exception e) { ftp = null; logger.error("連接失敗!", e); } return ftp; } /** * 獲取FTP配置信息:ip,port,上傳目錄。。。 * * @return FtpVO */ protected static FtpVO getFtpCommonConfigVO() { return ftpVo; } /** * 刪除文件 * * @param filePath * 文件路徑名 */ protected boolean delFile(String filePath) { // TODO Auto-generated method stub try { File file = new File(filePath); if (file.exists()) { file.delete(); } else { return false; } return true; } catch (Exception e) { // TODO: handle exception System.err.println("刪除文件失敗:" + e.getMessage()); return false; } } }
??
2 ,FtpDownloadUtils.java負責具體上傳操作
入口:ftpDownloadFile(String fileName)filename包括可獲取到的完整的路徑及文件名,其方法說明見注釋
執行下載操作:doFtpDownFile
?
?
import java.io.File; import org.apache.log4j.Logger; import com.etone.if1Interface.vo.FtpVO; import cz.dhl.ftp.Ftp; import cz.dhl.ftp.FtpFile; import cz.dhl.io.CoFile; import cz.dhl.io.CoLoad; import cz.dhl.io.LocalFile; public class FtpDownloadUtils extends FtpBaseUtils { private static final Logger logger = Logger .getLogger(FtpDownloadUtils.class); /** * fileName=路徑+文件名 * * @param fileNames */ public String ftpDownloadFile(String fileName) { FtpVO ftpVO = getFtpCommonConfigVO();// 獲取公共配置信息:帳號,端口 ftpVO.setFtpFileName(fileName);// 設置要下載的文件 ftpVO.setLocalFileName(fileName);// 存放路徑及名稱 Ftp ftp = getFtpInstance(ftpVO);// 獲取FTP實例 String message = doFtpDownFile(ftp, ftpVO); return message; } /** * 執行下載操作: FtpVO此對象里屬性包含ip,用戶名,帳號,存儲目錄等等 * * @param ftp * @param ftpVo * @return */ private String doFtpDownFile(Ftp ftp, FtpVO ftpVo) { String ftpDir = ftpVo.getFtpDir(); String ftpFileName = ftpVo.getFtpFileName(); String localDir = ftpVo.getLocalDir(); String localFileName = ftpVo.getLocalFileName(); String message = ftpFileName + "下載成功!"; try { if (ftp == null) { throw new Exception("ftp連接失敗!FTP信息:" + ftpVo.toString()); } File localFile = new File(localDir + localFileName); // 判斷文件在本地是否存在 if (localFile != null && localFile.exists() && ftpVo.isDelOldFile()) { localFile.delete(); } CoFile tmpfile = new LocalFile(localDir + localFileName); // 本地文件 CoFile ftpFile = new FtpFile(ftpDir + ftpFileName, ftp); // 遠程文件名 // 下載文件 if (!CoLoad.copy(tmpfile, ftpFile)) {// 下載 message = ftpFileName + "下載失敗:" + ftpVo.toString(); logger.error("文件下載失敗:" + ftpVo.toString()); } else {// 下載成功 message = ftpFileName + "下載成功:" + ftpVo.toString(); logger.info("文件下載成功:" + ftpVo.toString()); } } catch (Exception e) { message = ftpFileName + "下載失敗:" + e.getMessage(); logger.error(e.getMessage(), e); } finally { ftp.disconnect(); } return message; } }?
?
3,PropertiesUtil.java:負責配置文件加載(可選,去掉之后需要修改相應代碼及配置)
?
import java.io.IOException; import java.util.Properties; import org.apache.log4j.Logger; /** * A simple base implementation of Properties file * * @author Eagles 2005-12-22 */ public final class PropertiesUtil { protected static Logger logger = Logger.getLogger(PropertiesUtil.class); /** * 配置文件名稱 */ private static final String FILENAME = "config.properties"; private static Properties prop = null; /** * 初始化加載配置文件 * * @return:an instance from Properties */ private static synchronized Properties getProperties() { logger.debug("init an instance from the Properties"); if (prop == null) { prop = new Properties(); try { prop.load(PropertiesUtil.class.getClassLoader() .getResourceAsStream(FILENAME)); return prop; } catch (IOException ex) { logger.error("init an instance from the Properties error:" + ex.getMessage()); return null; } } return prop; } public static String getValue(String param) { String result = getProperties().getProperty(param); return result == null ? "" : result; } public static void main(String[] args) { System.out.println(PropertiesUtil.getValue("ftpPassword")); } }
?
?對應加載的配置文件
?
#---------------------------------------------- # Ftp Config #---------------------------------------------- FTP.IP=192.168.7.161 FTP.USER=root FTP.PASSWORD=etone FTP.PORT=21 #ftp存放目錄 FTP.DIR.TASKFile=/data/ #本地文件存放目錄 LOCAL.DIR.TEMP.TASKFile=/temp/?
存放ftp配置屬性VO(可選,去掉之后需要修改相應代碼及配置)
?
import org.apache.commons.lang.builder.ToStringBuilder; /** * ftp相關數據封裝類 * @author Administrator * */ public class FtpVO { private String ip; private int port; private String user; private String password; private String ftpDir; private String ftpFileName; private String localDir; private String localFileName; private boolean isDelOldFile; private boolean isReName; public String getFtpDir() { return ftpDir; } public void setFtpDir(String ftpDir) { this.ftpDir = ftpDir; } public String getFtpFileName() { return ftpFileName; } public void setFtpFileName(String ftpFileName) { this.ftpFileName = ftpFileName; } public String getIp() { return ip; } public void setIp(String ip) { this.ip = ip; } public boolean isDelOldFile() { return isDelOldFile; } public void setDelOldFile(boolean isDelOldFile) { this.isDelOldFile = isDelOldFile; } public boolean isReName() { return isReName; } public void setReName(boolean isReName) { this.isReName = isReName; } public String getLocalDir() { return localDir; } public void setLocalDir(String localDir) { this.localDir = localDir; } public String getLocalFileName() { return localFileName; } public void setLocalFileName(String localFileName) { this.localFileName = localFileName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public int getPort() { return port; } public void setPort(int port) { this.port = port; } public String getUser() { return user; } public void setUser(String user) { this.user = user; } public String toString() { return ToStringBuilder.reflectionToString(this); } }?
4,FileUtils.java輔助類(可選,可以把此部分代碼移到FtpBaseUtils.java中,writeToFile()可刪掉)
?
?
import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import org.apache.log4j.Logger; public class FileUtils { private static final Logger logger = Logger.getLogger(FileUtils.class); public static final String taskFilePath = PropertiesUtil .getValue("LOCAL.DIR.TEMP.TASKFile"); public static final String prefix = "test_"; public static final String suffix = ".txt"; public static String webRoot = ""; static { // 獲取webRoot目錄 webRoot = FileUtils.class.getClassLoader().getResource("").toString();// file:/D:/publish/Elvis_GZ_V4/WEB-INF/classes/ if (System.getProperty("os.name").toUpperCase().indexOf("WINDOWS") != -1) { webRoot = webRoot.replace("file:/", "");// file:/D:/publish/Elvis_GZ_V4/WEB-INF/classes/ } else { webRoot = webRoot.replace("file:", "");// file:/opt/web/Elvis_GZ_V4/WEB-INF/classes/ } webRoot = webRoot.replace("/WEB-INF/classes/", ""); webRoot = webRoot.replace("%20", " "); } public static final String getWebRoot() { return webRoot; } public static final String getTaskFilePath() { return getWebRoot() + taskFilePath; } /** * 內容寫入指定文件 * * @param content * @param fileName */ public static void writeToFile(String content, String fileName) { System.out.println("sssss"); BufferedWriter buffWriter = null; try { buffWriter = new BufferedWriter(new FileWriter(fileName, true)); buffWriter.write(content); buffWriter.newLine(); } catch (IOException e) { logger.error("寫入文件【" + fileName + "】失敗:" + e.getMessage(), e); } finally { if (null != buffWriter) { try { buffWriter.flush(); buffWriter.close(); } catch (IOException e) { logger.error("close bufferWriter failed:" + e.getMessage(), e); } } System.out.println("eeeee"); } } }?
?
?