1.下载 apache commons-net-1.4.1 jar包
<dependency> <groupId>commons-net</groupId> <artifactId>commons-net</artifactId> <version>1.4.1</version> </dependency>
<dependency> <groupId>net.sourceforge.javacsv</groupId> <artifactId>javacsv</artifactId> <version>2.0</version> </dependency>
2.创建 FtpClientUtil 工具类
package com.example.diagnosis.util; import com.csvreader.CsvReader; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.ftp.FTPFile; import org.apache.commons.net.ftp.FTPReply; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.*; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; /** * ftp连接管理(使用apache commons-net-1.4.1 lib) */ public class FtpClientUtil { private static final Logger logger = LoggerFactory.getLogger(FtpClientUtil.class); private FTPClient ftpClient = null; private String server; private int port; private String userName; private String userPassword; public FtpClientUtil(String server, int port, String userName, String userPassword) { this.server = server; this.port = port; this.userName = userName; this.userPassword = userPassword; } /** * 链接到服务器 * * @return * @throws Exception */ public boolean open() { if (ftpClient != null && ftpClient.isConnected()) { return true; } try { ftpClient = new FTPClient(); // 连接 ftpClient.connect(this.server, this.port); ftpClient.login(this.userName, this.userPassword); ftpClient.enterLocalPassiveMode(); // 检测连接是否成功 int reply = ftpClient.getReplyCode(); if (!FTPReply.isPositiveCompletion(reply)) { this.close(); System.exit(1); } return true; } catch (Exception ex) { // 关闭 this.close(); logger.error("FTP连接失败..."); return false; } } private boolean cd(String dir) throws IOException { if (ftpClient.changeWorkingDirectory(dir)) { return true; } else { return false; } } /** * 获取目录下所有的文件名称 * * @param filePath * @return * @throws IOException */ public List<String> getFileList(String filePath, String ext, List<String> arrList) throws IOException { if (filePath.startsWith("/") && filePath.endsWith("/")) { if (ftpClient.changeWorkingDirectory(filePath)) { FTPFile[] list = ftpClient.listFiles(); for (FTPFile ftpFile : list) { if (ftpFile.isFile()) { if (ftpFile.getName().endsWith(ext)) { arrList.add(filePath + ftpFile.getName()); } } else if (ftpFile.isDirectory()) { if (!".".equals(ftpFile.getName()) && !"..".equals(ftpFile.getName())) { getFileList(filePath + ftpFile.getName() + "/", ext, arrList); } } } } // ftpClient.setControlEncoding("GBK"); } return arrList; } public List<String> fileList(String filePath) throws IOException { List<String> arrList = new CopyOnWriteArrayList<>(); if (filePath.startsWith("/") && filePath.endsWith("/")) { if (ftpClient.changeWorkingDirectory(filePath)) { ftpClient.changeWorkingDirectory(filePath); FTPFile[] list = ftpClient.listFiles(); for (FTPFile ftpFile : list) { arrList.add(ftpFile.getName()); } } } return arrList; } /** * <b>将一个IO流解析,转化数组形式的集合<b> * * @param in 文件inputStream流 */ public List<String[]> csv(InputStream in) { List<String[]> csvList = new ArrayList<String[]>(); if (null != in) { CsvReader reader = new CsvReader(in, ',', Charset.forName("GBK")); try { // 遍历每一行,若有#注释部分,则不处理,若没有,则加入csvList while (reader.readRecord()) { if (!reader.getValues()[0].contains("#"))// 清除注释部分 { csvList.add(reader.getValues()); } } } catch (IOException e) { e.printStackTrace(); } reader.close(); } return csvList; } /** * 获取csv文件内容. */ public List<String[]> getFtpFileContent(String fileName, String filePath, List<String[]> fileContent) throws IOException { ftpClient.changeWorkingDirectory(filePath); InputStream in = ftpClient.retrieveFileStream(fileName); fileContent.addAll(csv(in)); in.close(); ftpClient.completePendingCommand(); return fileContent; } /** * 关闭链接 */ public void close() { try { if (ftpClient != null && ftpClient.isConnected()) ftpClient.disconnect(); } catch (Exception e) { e.printStackTrace(); } } public FTPClient getFtpClient() { return ftpClient; } public void setFtpClient(FTPClient ftpClient) { this.ftpClient = ftpClient; } }
3.创建测试类Test
package com.example.diagnosis; import com.example.diagnosis.util.FtpClientUtil; import java.io.IOException; import java.util.ArrayList; import java.util.List; public class test { public static void main(String[] args) { FtpClientUtil ftpClientUtil = new FtpClientUtil( "host", 80, "admin", "admin"); if (ftpClientUtil.open()) { //ftp链接成功 //csv文件路径 String pathFile = ""; try { List<String> fileList = ftpClientUtil.getFileList(pathFile + "/", "csv", new ArrayList<>()); for (String s : fileList) { //截取文件名 String fileName = s.substring(s.lastIndexOf("/") + 1); //截取文件路径 String filePath = s.substring(0, s.lastIndexOf("/") + 1); List<String[]> ftpFileContent = ftpClientUtil.getFtpFileContent(fileName, filePath, new ArrayList<>()); System.out.println(ftpFileContent); } } catch (IOException e) { e.printStackTrace(); } } } }