添加依赖:
<!--添加FTP依赖--> <dependency> <groupId>commons-net</groupId> <artifactId>commons-net</artifactId> <version>3.3</version> </dependency>
从FTP协议中读取文件:
import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPFile; import org.apache.commons.net.ftp.FTPReply; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.ResourceBundle; /** * *ftp.hostname=172.19.xx.xx *ftp.port=21 *ftp.username=admin *ftp.password=123456 *ftp.pathname=/ * * 初始化FTP */ @Component public class FTPClientRequest { //private static final Log logger = LogFactory.getLog(FTPClientRequest.class); private static final Logger logger = Logger.getLogger(Async2tda.class); private static ResourceBundle resource = ResourceBundle.getBundle("application"); private static FTPClient ftpClient = null; @Autowired private Async2tda async2tda; /** * 初始化FTP */ public void initFTP(){ try { ftpClient = new FTPClient(); ftpClient.setConnectTimeout(5000); ftpClient.setControlEncoding("UTF-8"); String hostname = resource.getString("ftp.hostname"); Integer port = Integer.parseInt(resource.getString("ftp.port")); String username = resource.getString("ftp.username"); String password = resource.getString("ftp.password"); String pathname = resource.getString("ftp.pathname"); ftpClient.connect(hostname,port); ftpClient.login(username,password); //跳转到文件目录 ftpClient.changeWorkingDirectory(pathname); //设置连接模式 ftpClient.enterLocalPassiveMode(); if (FTPReply.isPositiveCompletion(ftpClient.getReplyCode())){ logger.debug("FTP连接成功"); }else{ ftpClient.disconnect(); logger.debug("FTP连接失败"); } } catch (Exception e) { logger.error("FTP连接异常:"+e); } } /** * 读取FTP的XML文件 */ //@Async public void readFilesFTP(){ try { if (ftpClient == null || !FTPReply.isPositiveCompletion(ftpClient.getReplyCode())){ initFTP(); } if (FTPReply.isPositiveCompletion(ftpClient.getReplyCode())){ FTPFile[] ftpFiles = ftpClient.listFiles(); for (FTPFile ftpFile : ftpFiles) { String fileName = ftpFile.getName(); if (!StringUtils.isEmpty(fileName) && fileName.substring(fileName.lastIndexOf(".")+1).toLowerCase().equals("xml")) { String xmlStr = ""; InputStream inputStream = null; InputStreamReader inputStreamReader = null; BufferedReader bufferedReader = null; try { inputStream = ftpClient.retrieveFileStream(fileName); inputStreamReader = new InputStreamReader(inputStream,"UTF-8"); bufferedReader = new BufferedReader(inputStreamReader); String len; while ((len = bufferedReader.readLine()) != null){ xmlStr += len; } } catch (IOException e) { logger.error("sendTdaXML read files error:"+e); } finally { if (bufferedReader != null){ bufferedReader.close(); } if (inputStreamReader != null) { inputStreamReader.close(); } if (!inputStream.equals(null)){ inputStream.close(); } } async2tda.sendTdaXML(xmlStr); //ftpClient.deleteFile(fileName); ftpClient.getReply();//循环读取文件流需要执行getReply,否则第二个文件流为null } } } } catch (Exception e) { logger.error("readFilesFTP is error:"+e); } } }