涉及jar包:jftp.jar,jftp-bin-0_70.jar,log4j.jar(見(jiàn)Socket使用之Ftp上傳工具類)
上傳見(jiàn):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連接實(shí)例
*
* @param ftpVo
* ftp連接信息
* @return Ftp cz.dhl.ftp.Ftp實(shí)例
*/
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("測(cè)試連接,ftp信息:" + ftpVo.toString());
try {
// 測(cè)試是否能連接ftp服務(wù)器,如果沒(méi)有連接,返回失敗信息
Socket client = new Socket();
System.out.println("ftp 連接開(kāi)始..");
SocketAddress addr = new InetSocketAddress(ftpIp, ftpPort);
// 連接5秒后無(wú)法連接,返回失敗信息
client.connect(addr, 1500); // 超時(shí)時(shí)間為1.5秒
System.out.println("ftp 斷開(kāi)連接..");
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 ,F(xiàn)tpDownloadUtils.java負(fù)責(zé)具體上傳操作
入口:ftpDownloadFile(String fileName)filename包括可獲取到的完整的路徑及文件名,其方法說(shuō)明見(jiàn)注釋
執(zhí)行下載操作: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();// 獲取公共配置信息:帳號(hào),端口
ftpVO.setFtpFileName(fileName);// 設(shè)置要下載的文件
ftpVO.setLocalFileName(fileName);// 存放路徑及名稱
Ftp ftp = getFtpInstance(ftpVO);// 獲取FTP實(shí)例
String message = doFtpDownFile(ftp, ftpVO);
return message;
}
/**
* 執(zhí)行下載操作: FtpVO此對(duì)象里屬性包含ip,用戶名,帳號(hào),存儲(chǔ)目錄等等
*
* @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); // 遠(yuǎn)程文件名
// 下載文件
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:負(fù)責(zé)配置文件加載(可選,去掉之后需要修改相應(yīng)代碼及配置)
?
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"));
}
}
?
?對(duì)應(yīng)加載的配置文件
?
#----------------------------------------------
# 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(可選,去掉之后需要修改相應(yīng)代碼及配置)
?
import org.apache.commons.lang.builder.ToStringBuilder;
/**
* ftp相關(guān)數(shù)據(jù)封裝類
* @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;
}
/**
* 內(nèi)容寫入指定文件
*
* @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");
}
}
}
?
?