我的家園

          我的家園

          Socket使用之Ftp下載工具類

          Posted on 2012-04-15 16:27 zljpp 閱讀(353) 評論(0)  編輯  收藏

          ?

          涉及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");
          		}
          	}
          }
          
          ?

          ?

          ?






          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 唐河县| 溧阳市| 二连浩特市| 贵港市| 长宁县| 南丰县| 武陟县| 耿马| 青冈县| 昌宁县| 肃南| 冀州市| 南康市| 大渡口区| 麦盖提县| 辛集市| 伊金霍洛旗| 共和县| 西乌| 庄浪县| 宝鸡市| 湖南省| 大冶市| 南丰县| 离岛区| 凤翔县| 汤阴县| 龙游县| 唐海县| 托克逊县| 阳东县| 文安县| 鹤壁市| 富蕴县| 东乌珠穆沁旗| 保亭| 建湖县| 同江市| 长岛县| 吉首市| 宜州市|