java如何使用FTP下载

在进行文件的下载时,我们大多数选的是FTP文件传输的方法,相信大家对这种下载方式还是比较熟悉的。那么有没有试过用java语言,来操作FTP进行下载呢?本篇主要对FTP做了简要的说明,然后对FTP下载思路进行梳理,最后带来FTP下载文件的实例代码展示。

1、FTP说明

FTP是文件传输协议FileTransferProtocol的英文缩写,它是一种TCP/IP协议,属于TCP/IP协议组。双向传送控制文件。与此同时,它也是一种应用(应用程序)。根据不同的操作系统,FTP应用程序各不相同,而且所有这些应用程序都遵循用于传输文件的相同协议。该协议由两部分组成,一是FTP服务器,二是FTP客户端。

2、下载思路

(1)设置文件类型(二进制)

(2)处理ftp对应文件输入流,ftp客户端对象和 ftp文件输入流

(3)处理完毕的文件列表,用于执行文件删除使用

(4)处理当前的文件名称

3、FTP下载实例

/**
*
*JAVA操作FTP下载
*文件下载。
*
*/
privatevoidftpDownload()
{
FTPClientftpClient=null;
InputStreaminput=null;
booleanloginFlag=false;
List<String>list=newArrayList<String>();
try
{
intdefaultPort=CommonsMessage.FTP_DEFAULT_PORT;//21
inttimeout=M400Constant.NUM_SIXTY_THOUSAND*M400Constant.NUM_TWO;//120000
ftpClient=newFTPClient();

ftpClient.setDefaultPort(defaultPort);
ftpClient.setConnectTimeout(timeout);
//ftpClient.setSoTimeout(timeout);
ftpClient.setDefaultTimeout(timeout);
ftpClient.setDataTimeout(timeout);
ftpClient.setControlEncoding("UTF-8");
FTPClientConfigconf=newFTPClientConfig(FTPClientConfig.SYST_UNIX);
conf.setServerLanguageCode("en");
conf.setDefaultDateFormatStr("MMMddHH:mm");
ftpClient.configure(conf);

ftpClient.connect(SystemConfig.getKey("scpFtpIp"));
loginFlag=ftpClient.login(SystemConfig.getKey("scpFtpUserName").trim(),
SystemConfig.getKey("scpFtpPassword").trim());
StringftpDir=SystemConfig.getKey("ftpHangupDir").trim();
if(!loginFlag)
{
DEBUGGER.debug("loginscpftpis:"+loginFlag);
}
//StringftpDir=SystemConfig.getKey("ftpHangupDir").trim();

if(ftpClient.changeWorkingDirectory(ftpDir))
{


FTPFilefile[]=ftpClient.listFiles(ftpDir);

if(file!=null&&file.length>0)
{
DEBUGGER.debug("hungupfilesizeis:"+file.length);
for(inti=0;i<file.length;i++)
{
StringfileName=file[i].getName();
ftpClient.setBufferSize(CommonsMessage.ONE_K_BUFFER_SIZE);

//设置文件类型(二进制)
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);

input=ftpClient.retrieveFileStream(fileName);
processInput(ftpClient,input,list,fileName);

//if(downFlag){
//ftpClient.deleteFile(fileName);
//}
}
}
else
{
try
{
Thread.sleep(M400Constant.NUM_FIVE_THOUSAND);
}
catch(InterruptedExceptione)
{
/*
*if(DEBUGGER.isDebugEnable()){
*DEBUGGER.debug("FailedtoqueryScpToQuery",e);}
*/
error("FailedtoqueryScpToQuery",e);
}
}

}
else
{
DEBUGGER.debug("scpdiriserror");
}

}
catch(Exceptione)
{
/*
*DEBUGGER.debug("dowonloadfileisfaild",e);
*/
error("dowonloadfileisfaild",e);
}
finally
{
close(input,"closeinputStreamisfaild");
if(ftpClient!=null)
{
try
{
deleteFile(ftpClient,list);
booleanlogoutFlag=false;
try
{
logoutFlag=ftpClient.logout();
//DEBUGGER.debug("logout:"+logoutFlag);
}
catch(Exceptione)
{
/*
*DEBUGGER.debug("logout:"+logoutFlag);
*/
error("logout:"+logoutFlag,e);
}
ftpClient=null;
}
catch(Exceptione)
{
/*
*if(DEBUGGER.isDebugEnable()){
*DEBUGGER.error("FailedtoftpDownload",e);}
*/
error("FailedtoftpDownload",e);
}
//try{
//ftpClient.disconnect();
//}catch(IOExceptione){
//if(DEBUGGER.isDebugEnable()){
//DEBUGGER.debug("FailedtoftpDownload",e);
//}
//}
}
}
}

/**
*处理ftp对应文件输入流。
*
*@paramftpClient
*ftp客户端对象
*@paraminput
*ftp文件输入流
*@paramlist
*处理完毕的文件列表,用于执行文件删除使用
*@paramfileName
*当前处理的文件名称
*/
privatevoidprocessInput(FTPClientftpClient,InputStreaminput,List<String>list,StringfileName)
{
if(input==null)
{
return;
}
//booleandownFlag=callingService(input);
callingService(input);
try
{
input.close();
ftpClient.completePendingCommand();
list.add(fileName);
}
catch(Exceptione)
{
/*
*DEBUGGER.debug("FailedtoftpDownload",e);
*/
error("FailedtoftpDownload",e);
}
}
}
原文来自:https://www.py.cn
© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容