当前位置:编程学习 > JAVA >>

FTP通用处理

[java]
package com.metarnet.Execution.business.ftp; 
import java.io.File; 
import java.io.IOException; 
import java.text.ParseException; 
import org.apache.log4j.Logger; 
import com.enterprisedt.net.ftp.FTPClient; 
import com.enterprisedt.net.ftp.FTPConnectMode; 
import com.enterprisedt.net.ftp.FTPException; 
import com.enterprisedt.net.ftp.FTPFile; 
import com.enterprisedt.net.ftp.FTPTransferType; 
import com.metarnet.Execution.Model.statics.FTP_information; 
 
/**
 *<p>ftp连接管理(使用apache commons-net-1.4.1 lib)</p>
 * 闫帆
 */ 
public class FTP_Client { 
public static final Logger logger = Logger.getLogger(FTP_Client.class); 
private FTPClient ftpClient = new FTPClient(); 
private static FTP_Client ftp_Client; 
/**
* 单例模式,每个实例只能有一个FTP上传
* @return
*/ 
public static FTP_Client getThis() 

if(ftp_Client==null) 

ftp_Client=new FTP_Client(); 

return ftp_Client; 

/**
* 打开到FTP的连接
* @return
* @throws IOException 
* @throws FTPException 
* @throws Exception
*/ 
public boolean ConnectionFTP() throws IOException, FTPException 

if(!ftpClient.connected()) 

try { 
ftpClient.setRemoteHost(FTP_information.getThis().getFTP_server()); 
ftpClient.setRemotePort(FTP_information.getThis().getFTP_port()); 
ftpClient.setControlEncoding("GB2312"); 
ftpClient.connect(); 
ftpClient.setTimeout(1200); 
ftpClient.login(FTP_information.getThis().getFTP_username(), FTP_information.getThis().getFTP_password()); 
ftpClient.setType(FTPTransferType.BINARY); 
ftpClient.setConnectMode(FTPConnectMode.ACTIVE); 
logger.debug("FTP连接成功!"); 
} catch (IOException e) { 
logger.error("FTP_IO连接失败:",e); 
throw e; 
} catch (FTPException e) { 
logger.error("FTP连接失败:",e); 
throw e; 


return ftpClient.connected(); 

/**
* <p>ftp上传文件</p>
* @param srcUrl 须上传文件
* @param targetFname 生成目标文件
* @throws Exception 
*/ 
public String uploadFile(String srcUrl,String targetFname) throws Exception{ 
try { 
if(ConnectionFTP()) 

if(!ftpClient.existsDirectory(FTP_information.getThis().getFTP_UP_URL())) 

ftpClient.mkdir(FTP_information.getThis().getFTP_UP_URL()); 

if(OpenDir(FTP_information.getThis().getFTP_UP_URL())) 

           ftpClient.setType(FTPTransferType.BINARY);//设置文件类型(二进制)  
           return ftpClient.put(srcUrl,targetFname); //上传 

else 

logger.debug("未能打开目录:"+FTP_information.getThis().getFTP_UP_URL()); 
return "未能打开目录:"+FTP_information.getThis().getFTP_UP_URL(); 


else { 
logger.debug("FTP服务器未打开,不能进行上传操作"); 
return "FTP服务器未打开,不能进行上传操作"; 

} catch (Exception e) { 
logger.error("FTP上传过程中出现异常:",e); 
throw new Exception("FTP上传过程中出现异常",e); 


/**
* 进入需要的目录
* @return
* @throws IOException 
* @throws FTPException 
* @throws Exception
*/ 
public boolean OpenDir(String dirname) 

try { 
String[] temp=dirname.split("/"); 
if(temp.length>0) 

for (String tmp : temp) { 
if(ConnectionFTP()) 

ftpClient.chdir(tmp); 



else { 
if(ConnectionFTP()) 

ftpClient.chdir(dirname); 


return true; 
} catch (IOException e) { 
return false; 
} catch (FTPException e) { 
return false; 


/**
* 获取文件列表
* @return
* @throws FTPException 
* @throws IOException 
* @throws ParseException 
* @throws Exception
*/ 
public FTPFile[] getFileNameList() throws IOException, FTPException, ParseException 
 { 
FTPFile[] fileList= ftpClient.dirDetails(FTP_information.getThis().getFTP_UP_URL()); 
ftpClient.chdir(FTP_information.getThis().getFTP_UP_URL()); 
    return fileList; 
 } 
/**
 * 下载文件夹
 * @param saveDir
 */ 
public void Download(String saveDir) 

try { 
if(ConnectionFTP()) 

FTPFile[] list=getFileNameList(); 
File file=new File(saveDir); 
if  (!file .exists()  && !file .isDirectory())       

   file .mkdir(); 

for (FTPFile FileName : list) { 
if (FileName.isFile()) { 
ftpClient.get(saveDir,FileName.getName()); 
logger.debug("下载文件:"+FileName.getName()+"完成"); 


logger.debug("当前所在文件夹:"+FTP_information.getThis().getFTP_UP_URL()+"下载完成"); 
ftpClient.quit(); 

} catch (IOException e) { 
logger.error(e); 
} catch (FTPException e) { 
logger.error(e); 
} catch (ParseException e) { 
logger.error(e); 


/**
* <p>删除ftp上的文件</p>
*/ 
public boolean removeFile(String srcFname){ 
if(ftpClient.connected()){ 
try { 
if(ftpClient.existsFile(srcFname)) 

ftpClient.delete(srcFname); 

else 

logger.debug("不存在需要删除的文件"); 

return true; 
} catch (Exception e) { 
logger.error("FTP删除文件出现异常:",e); 
this.closeCon(); 


return false; 

/**
*<p>销毁ftp连接</p> 
*/ 
public void closeCon(){ 
if(ftpClient.connected()){ 
try { 
ftpClient.quit(); 
} catch (Exception e) { 
logger.error("FTP断开连接失败:",e); 




补充:软件开发 , Java ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,