在进行文件的下载时,我们大多数选的是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
暂无评论内容