3行代码实现ftp 上传、下载、删除操作集合

为了帮助小伙伴们便捷操作ftp,现对常用的上传、下载、删除功能进行封装,小伙伴只需要传入需要的参数操作即可!告诉小伙伴好消息,本项目我已开源,大家可以根据需要克隆run起来!!!

文章目录

      • 一、集合总览
        • ① 上传集合
        • ② 下载集合
        • ③ 删除集合
      • 二、配置总览
        • ① pom依赖
        • ② 全局配置文件application.yml
        • ③ dev环境配置文件
        • ④ ftp基础参数配置类BaseConfig
        • ⑤ ftp公用工具类
      • 三、ftp实战
        • ① 下载集合测试
        • ② 上传集合测试
        • ③ 删除集合测试
      • 项目源码:

一、集合总览

① 上传集合

上传集合说明
uploadLocalDirToRemotePath上传本地文件夹至远程目录(已封装)
uploadLocalDirFiletListToRemoteDir上传本地目录下文件列表至远程目录(已封装)
uploadLocalSpFileToRemotePath上传本地指定文件至远程目录(已封装)
uploadLocalSpFileTypeToRemotePath上传本地指定文件类型的文件至远程目录(已封装)
uploadLocalSpFileNameContainStrToRemotePath上传本地指定文件名包含指定字符串的文件至远程目录(已封装)
uploadLocalDirFileNameSpPrefixFileList上传本地指定文件名前缀的文件至远程目录(已封装)

② 下载集合

下载集合说明
downloadRemoteDirAppointFile下载远程目录下指定文件至本地目录(已封装)
downloadFTPDirAppointFileTypeList下载远程目录下面的某个类型的文件列表(已封装)
downloadFTPDirFileContainInputStrList下载远程目录下面的文件名包含指定字符串的文件列表(已封装)
downloadFTPDirFileNameprefixList下载远程目录下面的指定文件前缀的文件列表(已封装)
downloadAllFilesInTheRemoteDirectory下载远程目录下的文件列表(已封装)
downloadRemoteFolders下载远程文件夹至本地目录(已封装)

③ 删除集合

删除集合说明
delteRemoteAppointDirFileList删除远程指定目录下的所有文件(已封装)
delteRemoteAppointFile删除远程指定文件(已封装)
delteRemoteAppointFileTypeList删除远程指定目录下的指定文件类型的文件列表(已封装)
delteRemoteAppointFilePrefixList删除远程指定目录下的指定文件名前缀的文件列表(已封装)
delteRemoteFileNameContainInptStrList删除远程指定目录下的文件名包含指定字符串的文件列表(已封装)

二、配置总览

① pom依赖

  <dependencies><!--springMVC启动器--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--文件上传--><dependency><groupId>commons-net</groupId><artifactId>commons-net</artifactId><version>3.3</version></dependency><!--实体工具类--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><!--日志打印--><dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version></dependency></dependencies>

② 全局配置文件application.yml

#端口
server:port: 80
#  激活环境配置
spring:profiles:active: dev

③ dev环境配置文件

###########################################################################
# IP地址 用户名 密钥 端口 本地保存路径 远程下载目录 远程指定文件 指定的文件类型 指定文件名
# 文件名中指定字符串 文件名前缀 本地文件同步目录 远程上传目录 远程删除目录
############################################################################
ftp:ipAddress: 192.168.55.12 #IP地址userName: ftpuser #用户名passWd: cx01 #密钥port: 21 #端口localSaveDir: #本地保存路径remoteDownLoadDir: #远程下载目录remoteDirAppointFile: #远程指定文件fileType: #指定的文件类型appointFileName: #指定文件名inputStr: #文件名中指定字符串fileNamePrefix: #文件名前缀localSyncFileDir: #本地文件同步目录romoteUpLoadePath: #远程上传目录romoteDelPath: #远程删除目录

④ ftp基础参数配置类BaseConfig

package com.gblfy.config;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;/*** @author gblfy* @ClassNme BaseConfig* @Description TODO* @Date 2020/1/3 13:53* @version1.0*/
@Data
@Component
@ConfigurationProperties(prefix = "ftp")
public class BaseConfig {/***IP地址*/private String ipAddress;/***用户名*/private String userName;/***密钥*/private String passWd;/***端口*/private int port;/***本地保存路径*/private String localSaveDir;/***远程目录*/private String remoteDownLoadDir;/***远程指定文件*/private String remoteDirAppointFile;/***文件类型*/private String fileType;/***指定的文件名*/private String appointFileName;/***指定字符串*/private String inputStr;/***文件名前缀*/private String fileNamePrefix;/***本地同步的目录*/private String localSyncFileDir;/***远程同步的目录*/private String romoteUpLoadePath;/***删除远程的目录*/private String romoteDelPath;
}

⑤ ftp公用工具类

package com.gblfy.utils;import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPClientConfig;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
import org.apache.log4j.Logger;
import org.springframework.web.multipart.MultipartFile;import java.io.*;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.List;
import java.util.TimeZone;public class FTPEnhUtils {private FTPClient ftpClient;private String strIp;private int intPort;private String user;private String password;private String mFtpPath;private static Logger logger = Logger.getLogger(FTPEnhUtils.class.getName());/*** 路径get方法** @return* @author guobin*/public String getmFtpPath() {return mFtpPath;}/*** 路径set方法** @param mFtpPath* @author guobin*/public void setmFtpPath(String mFtpPath) {this.mFtpPath = mFtpPath;}// Ftp构造函数public FTPEnhUtils(String strIp, int intPort, String user, String password) {this.strIp = strIp;this.intPort = intPort;this.user = user;this.password = password;this.ftpClient = new FTPClient();}/*********************** Common Method Start ***********************//*** 登录到FTP服务器 成功返回true,不成功返回false** @return*/public boolean ftpLogin() {boolean isLogin = false;FTPClientConfig ftpClientConfig = new FTPClientConfig();ftpClientConfig.setServerTimeZoneId(TimeZone.getDefault().getID());this.ftpClient.setControlEncoding("UTF-8");this.ftpClient.configure(ftpClientConfig);try {if (this.intPort > 0) {this.ftpClient.connect(this.strIp, this.intPort);} else {this.ftpClient.connect(this.strIp);}// FTP服务器连接回答int reply = this.ftpClient.getReplyCode();if (!FTPReply.isPositiveCompletion(reply)) {this.ftpClient.disconnect();logger.info("登录FTP服务失败!");return isLogin;}this.ftpClient.login(this.user, this.password);// 设置传输协议this.ftpClient.enterLocalPassiveMode();this.ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);logger.info("用户 " + this.user + " 成功登陆FTP服务器");isLogin = true;} catch (Exception e) {e.printStackTrace();logger.info(this.user + "登录FTP服务失败!请检查连接参数是否正确!或者网络是否通畅!" + e.getMessage());}this.ftpClient.setBufferSize(1024 * 2);this.ftpClient.setDataTimeout(30 * 1000);return isLogin;}/*** 退出关闭服务器链接*/public void ftpLogOut() {if (null != this.ftpClient && this.ftpClient.isConnected()) {try {boolean reuslt = this.ftpClient.logout();// 退出FTP服务器if (reuslt) {logger.info("成功退出服务器");}} catch (IOException e) {e.printStackTrace();logger.info("退出FTP服务器异常!" + e.getMessage());} finally {try {this.ftpClient.disconnect();// 关闭FTP服务器的连接} catch (IOException e) {e.printStackTrace();logger.info("关闭FTP服务器的连接异常!");}}}}/*** 切换工作目录** @param pathname*/public void changeWorkingDirectory(String pathname) {try {this.ftpClient.changeWorkingDirectory(pathname);} catch (IOException e) {e.printStackTrace();}}/*** 打印出当前工作目录*/public void printWorkDir() {try {logger.info(this.ftpClient.printWorkingDirectory());} catch (IOException e) {e.printStackTrace();}}/*********************** Common Method Ends ***********************//*********************** Upload function Parent Start ***********************//*** 上传本地文件夹至远程目录(已封装)** @param strIp* @param tPort* @param user* @param password* @param remoteDirectoryPath*/public static void uploadLocalDirToRemotePath(String strIp, int tPort, String user, String password,String localSyncFileDir, String remoteDirectoryPath) {FTPEnhUtils f = new FTPEnhUtils(strIp, tPort, user, password);f.ftpLogin();f.uploadDirectorySub(localSyncFileDir, remoteDirectoryPath);f.ftpLogOut();}/*** 上传本地目录下文件列表至远程目录(已封装)** @param strIp* @param tPort* @param user* @param password* @param localSyncFileDir* @param romoteUpLoadePath*/public static void uploadLocalDirFiletListToRemoteDir(String strIp, int tPort, String user, String password,String localSyncFileDir, String romoteUpLoadePath) {FTPEnhUtils f = new FTPEnhUtils(strIp, tPort, user, password);f.ftpLogin();f.uploadLocalDirFileListSub(localSyncFileDir, romoteUpLoadePath);f.ftpLogOut();}/*** 上传本地指定文件至远程目录(已封装)** @param strIp* @param tPort* @param user* @param password* @param localFileName* @param remoteDirectoryPath*/public static void uploadLocalSpFileToRemotePath(String strIp, int tPort, String user, String password,String localFileName, String remoteDirectoryPath) {FTPEnhUtils f = new FTPEnhUtils(strIp, tPort, user, password);f.ftpLogin();File file = new File(localFileName);f.uploadAppointFileToRomotePathSub(file, remoteDirectoryPath);f.ftpLogOut();}/*** 上传本地指定文件类型的文件至远程目录(已封装)** @param strIp* @param tPort* @param user* @param password*/public static void uploadLocalSpFileTypeToRemotePath(String strIp, int tPort, String user, String password,String localSyncFileDir, String romoteUpLoadePath, String fileType) {FTPEnhUtils f = new FTPEnhUtils(strIp, tPort, user, password);f.ftpLogin();f.uploadLocalDirFileTypeListToRomoteSubmethod(localSyncFileDir, romoteUpLoadePath, fileType);f.ftpLogOut();}/*** 上传本地指定文件名包含指定字符串的文件至远程目录(已封装)** @param strIp* @param tPort* @param user* @param password*/public static void uploadLocalSpFileNameContainStrToRemotePath(String strIp, int tPort, String user,String password, String localSyncFileDir, String romoteUpLoadePath, String inputStr) {FTPEnhUtils f = new FTPEnhUtils(strIp, tPort, user, password);f.ftpLogin();f.uploadLocalSpFileNameContainStrToRemotePathSubmethod(localSyncFileDir, romoteUpLoadePath, inputStr);f.ftpLogOut();}/*** 上传本地指定文件名前缀的文件至远程目录(已封装)** @param strIp* @param tPort* @param user* @param password* @param localSyncFileDir* @param romoteUpLoadePath* @param fileNamePrefix*/public static void uploadLocalDirFileNameSpPrefixFileList(String strIp, int tPort, String user, String password,String localSyncFileDir, String romoteUpLoadePath, String fileNamePrefix) {FTPEnhUtils f = new FTPEnhUtils(strIp, tPort, user, password);f.ftpLogin();f.uploadLocalDirFileNameSpPrefixFileListSubmethod(localSyncFileDir, romoteUpLoadePath, fileNamePrefix);f.ftpLogOut();}/*** 上传文件夹至远程目录(子方法)** @param localDirectory* @param remoteDirectoryPath* @return*/public boolean uploadDirectorySub(String localDirectory, String remoteDirectoryPath) {File file = new File(localDirectory);try {logger.info("file.getName():" + file.getName());remoteDirectoryPath = remoteDirectoryPath + file.getName() + "/";this.ftpClient.makeDirectory(remoteDirectoryPath);// ftpClient.listDirectories();} catch (IOException e) {e.printStackTrace();logger.info(remoteDirectoryPath + "目录创建失败");}File[] fileList = file.listFiles();logger.info("文件数量:" + fileList.length);for (int i = 0; i < fileList.length; i++) {logger.info("文件名:" + fileList[i].getName());if (!fileList[i].isDirectory()) {String srcName = fileList[i].getPath().toString();uploadAppointFileToRomotePathSub(new File(srcName), remoteDirectoryPath);}}for (int i = 0; i < fileList.length; i++) {logger.info("文件名:" + fileList[i].getName());if (fileList[i].isDirectory()) {// 递归uploadDirectorySub(fileList[i].getPath().toString(), remoteDirectoryPath);}}return true;}/*** 上传本地指定文件至远程目录(子方法)** @param localFile* @param romoteUpLoadePath* @return*/public boolean uploadAppointFileToRomotePathSub(File localFile, String romoteUpLoadePath) {BufferedInputStream inStream = null;boolean success = false;try {// Create directorythis.ftpClient.makeDirectory(romoteUpLoadePath);// Toggle directorythis.ftpClient.changeWorkingDirectory(romoteUpLoadePath);// 改变工作路径inStream = new BufferedInputStream(new FileInputStream(localFile));logger.info(localFile.getName() + ">>>Start Upload.....");success = this.ftpClient.storeFile(localFile.getName(), inStream);if (success == true) {logger.info(localFile.getName() + ">>>>>Upload success");return success;}} catch (FileNotFoundException e) {e.printStackTrace();logger.info(localFile + "No Found");} catch (IOException e) {e.printStackTrace();} finally {if (inStream != null) {try {inStream.close();} catch (IOException e) {e.printStackTrace();}}}return success;}public boolean upLoadMul(MultipartFile localFile, String romoteUpLoadePath, String upFileName) {BufferedInputStream inStream = null;boolean success = false;try {// Create directory
//			this.ftpClient.makeDirectory(romoteUpLoadePath);// Toggle directorythis.ftpClient.changeWorkingDirectory(romoteUpLoadePath);// 改变工作路径inStream = new BufferedInputStream(localFile.getInputStream());logger.info(upFileName+ ">>>Start Upload.....");success = this.ftpClient.storeFile(upFileName, inStream);if (success == true) {logger.info(localFile.getOriginalFilename() + ">>>>>Upload success");return success;}} catch (FileNotFoundException e) {e.printStackTrace();logger.info(localFile + "No Found");} catch (IOException e) {e.printStackTrace();} finally {if (inStream != null) {try {inStream.close();} catch (IOException e) {e.printStackTrace();}}}return success;}/*** 上传本地目录下文件列表至远程目录(子方法)** @param localSyncFileDir* @param romoteUpLoadePath* @return*/public boolean uploadLocalDirFileListSub(String localSyncFileDir, String romoteUpLoadePath) {File file = new File(localSyncFileDir);try {this.ftpClient.makeDirectory(romoteUpLoadePath);} catch (IOException e) {e.printStackTrace();logger.info(romoteUpLoadePath + "目录创建失败");}File[] ftpFileList = file.listFiles();if (ftpFileList != null && ftpFileList.length > 0) {for (File ff : ftpFileList) {logger.info("fileName:" + ff.getName());if (ff.isFile()) {String fileName = ff.getPath().toString();uploadAppointFileToRomotePathSub(new File(fileName), romoteUpLoadePath);} else if (ff.isDirectory()) {uploadLocalDirFileListSub(ff.getPath().toString(), romoteUpLoadePath);}}}return true;}/*** 上传本地指定文件类型的文件至远程目录(子方法)** @param localSyncFileDir* @param romoteUpLoadePath* @param fileType* @return*/public boolean uploadLocalDirFileTypeListToRomoteSubmethod(String localSyncFileDir, String romoteUpLoadePath,String fileType) {File file = new File(localSyncFileDir);try {this.ftpClient.makeDirectory(romoteUpLoadePath);} catch (IOException e) {e.printStackTrace();logger.info(romoteUpLoadePath + "目录创建失败");}File[] ftpFileList = file.listFiles();if (ftpFileList != null && ftpFileList.length > 0) {for (File ff : ftpFileList) {logger.info("fileName:" + ff.getName());if (ff.isFile() && ff.getName().endsWith(fileType)) {String srcName = ff.getPath().toString();uploadAppointFileToRomotePathSub(new File(srcName), romoteUpLoadePath);}}}return true;}/*** 上传本地指定文件名包含指定字符串的文件至远程目录(子方法)** @param localSyncFileDir* @param romoteUpLoadePath* @param inputStr* @return*/public boolean uploadLocalSpFileNameContainStrToRemotePathSubmethod(String localSyncFileDir,String romoteUpLoadePath, String inputStr) {File file = new File(localSyncFileDir);try {this.ftpClient.makeDirectory(romoteUpLoadePath);} catch (IOException e) {e.printStackTrace();logger.info(romoteUpLoadePath + "目录创建失败");}File[] ftpFileList = file.listFiles();if (ftpFileList != null && ftpFileList.length > 0) {for (File ff : ftpFileList) {logger.info("fileName:" + ff.getName());if (ff.isFile() && ff.getName().contains(inputStr)) {String srcName = ff.getPath().toString();uploadAppointFileToRomotePathSub(new File(srcName), romoteUpLoadePath);}}}return true;}/*** 上传本地指定文件名前缀的文件至远程目录(子方法)** @param localSyncFileDir* @param romoteUpLoadePath* @param fileNamePrefix* @return*/public boolean uploadLocalDirFileNameSpPrefixFileListSubmethod(String localSyncFileDir, String romoteUpLoadePath,String fileNamePrefix) {File file = new File(localSyncFileDir);try {this.ftpClient.makeDirectory(romoteUpLoadePath);} catch (IOException e) {e.printStackTrace();logger.info(romoteUpLoadePath + "目录创建失败");}File[] ftpFileList = file.listFiles();if (ftpFileList != null && ftpFileList.length > 0) {for (File ff : ftpFileList) {logger.info("fileName:" + ff.getName());if (ff.isFile() && ff.getName().startsWith(fileNamePrefix)) {String srcName = ff.getPath().toString();uploadAppointFileToRomotePathSub(new File(srcName), romoteUpLoadePath);}}}return true;}/*********************** Upload function Parent End ***********************//*********************** download function Parent Start ***********************//*** 下载远程文件夹至本地目录(已封装)** @param strIp* @param tPort* @param user* @param password* @param localDirectory* @param remoteDirectoryPath*/public static void downloadRemoteFolders(String strIp, int tPort, String user, String password,String localDirectory, String remoteDirectoryPath) {FTPEnhUtils f = new FTPEnhUtils(strIp, tPort, user, password);f.ftpLogin();f.downLoadDirectorySub(localDirectory, remoteDirectoryPath);f.ftpLogOut();}/*** 下载远程目录下的文件列表(已封装)** @param strIp* @param tPort* @param user* @param password* @param localDirectory* @param remoteDirectoryPath*/public static void downloadAllFilesInTheRemoteDirectory(String strIp, int tPort, String user, String password,String localDirectory, String remoteDirectoryPath) {FTPEnhUtils f = new FTPEnhUtils(strIp, tPort, user, password);f.ftpLogin();List<String> fileNames;try {fileNames = f.getFTPCurrentDirAllFileList(remoteDirectoryPath);// Number of printed fileslogger.info("fileNames.length : " + fileNames.size());if (fileNames != null) {for (String remoteFileName : fileNames) {logger.info("File name under directory : " + remoteFileName);f.downloadFileSub(remoteFileName, localDirectory, remoteDirectoryPath);}}} catch (ParseException e) {e.printStackTrace();} finally {f.ftpLogOut();}}/*** 下载远程目录下指定文件至本地目录(已封装)** @param strIp* @param tPort* @param user* @param password* @param appointFileName* @param localDirectory* @param remoteDirectoryPath*/public static void downloadRemoteDirAppointFile(String strIp, int tPort, String user, String password,String appointFileName, String localDirectory, String remoteDirectoryPath) {FTPEnhUtils f = new FTPEnhUtils(strIp, tPort, user, password);f.ftpLogin();List<String> fileNames;try {fileNames = f.getFTPDirAppointFileSub(remoteDirectoryPath, appointFileName);// Number of printed fileslogger.info("fileNames.length : " + fileNames.size());if (fileNames != null) {for (String remoteFileName : fileNames) {logger.info("File name under directory : " + remoteFileName);f.downloadFileSub(remoteFileName, localDirectory, remoteDirectoryPath);}}} catch (ParseException e) {e.printStackTrace();} finally {f.ftpLogOut();}}/*** 下载远程目录下面的某个类型的文件列表(已封装)** @param strIp* @param tPort* @param user* @param password* @param localDirectory* @param remoteDirectoryPath* @param fileType*/public static void downloadFTPDirAppointFileTypeList(String strIp, int tPort, String user, String password,String localDirectory, String remoteDirectoryPath, String fileType) {FTPEnhUtils f = new FTPEnhUtils(strIp, tPort, user, password);f.ftpLogin();List<String> fileNames;try {fileNames = f.getFTPDirTypeFileListSub(remoteDirectoryPath, fileType);// Number of printed fileslogger.info("fileNames.length : " + fileNames.size());if (fileNames != null) {for (String remoteFileName : fileNames) {logger.info("File name under directory : " + remoteFileName);f.downloadFileSub(remoteFileName, localDirectory, remoteDirectoryPath);}}} catch (ParseException e) {e.printStackTrace();} finally {f.ftpLogOut();}}/*** 下载远程目录下面的文件名包含指定字符串的文件列表(已封装)** @param strIp* @param tPort* @param user* @param password* @param localDirectory* @param remoteDirectoryPath* @param inputStr*/public static void downloadFTPDirFileContainInputStrList(String strIp, int tPort, String user, String password,String localDirectory, String remoteDirectoryPath, String inputStr) {FTPEnhUtils f = new FTPEnhUtils(strIp, tPort, user, password);f.ftpLogin();List<String> fileNames;try {fileNames = f.getFTPDirFileNameContainInputStrFileListsub(remoteDirectoryPath, inputStr);// Number of printed fileslogger.info("fileNames.length : " + fileNames.size());if (fileNames != null) {for (String remoteFileName : fileNames) {logger.info("File name under directory : " + remoteFileName);f.downloadFileSub(remoteFileName, localDirectory, remoteDirectoryPath);}}} catch (ParseException e) {e.printStackTrace();} finally {f.ftpLogOut();}}/*** 下载远程目录下面的指定文件前缀的文件列表(已封装)** @param strIp* @param tPort* @param user* @param password* @param localDirectory* @param remoteDirectoryPath* @param fileNamePrefix*/public static void downloadFTPDirFileNameprefixList(String strIp, int tPort, String user, String password,String localDirectory, String remoteDirectoryPath, String fileNamePrefix) {FTPEnhUtils f = new FTPEnhUtils(strIp, tPort, user, password);f.ftpLogin();List<String> fileNames;try {fileNames = f.getFTPDirFileNamePrefixFileListsub(remoteDirectoryPath, fileNamePrefix);// Number of printed fileslogger.info("fileNames.length : " + fileNames.size());if (fileNames != null) {for (String remoteFileName : fileNames) {logger.info("File name under directory : " + remoteFileName);f.downloadFileSub(remoteFileName, localDirectory, remoteDirectoryPath);}}} catch (ParseException e) {e.printStackTrace();} finally {f.ftpLogOut();}}/*** 获取FTP当前目录下面指定文件(子方法)** @param remoteDirectory* @return* @throws ParseException*/public List<String> getFTPDirAppointFileSub(String remoteDirectory, String appointFileName) throws ParseException {List<String> fileLists = new ArrayList<String>();// Get all file names in the specified directoryFTPFile[] ftpFileList = null;try {ftpFileList = this.ftpClient.listFiles(remoteDirectory);} catch (IOException e) {e.printStackTrace();}if (ftpFileList != null && ftpFileList.length > 0) {for (int i = 0; i < ftpFileList.length; i++) {FTPFile file = ftpFileList[i];if (file.isFile() && file.getName().equals(appointFileName)) {logger.info("fileName:" + file.getName());fileLists.add(file.getName());}}}return fileLists;}/**** 下载文件(公用方法)** @param remoteFileName     待下载文件名称* @param localDires         下载到当地那个路径下* @param remoteDownLoadPath remoteFileName所在的路径*/public boolean downloadFileSub(String remoteFileName, String localDires, String remoteDownLoadPath) {String strFilePath = localDires + "/" + remoteFileName;BufferedOutputStream outStream = null;boolean success = false;try {if (!(new File(localDires).exists())) {new File(localDires).mkdirs();}this.ftpClient.changeWorkingDirectory(remoteDownLoadPath);outStream = new BufferedOutputStream(new FileOutputStream(strFilePath));logger.info(remoteFileName + "开始下载....");long beforeTime = System.currentTimeMillis();success = this.ftpClient.retrieveFile(remoteFileName, outStream);long afterTime = System.currentTimeMillis();if (success == true) {double time = (afterTime - beforeTime) / 1000.0;File file = new File(strFilePath);long length = file.length();double downloadSpeed = (length / (time * 1024));downloadSpeed = (double) Math.round(downloadSpeed * 100) / 100;logger.info(remoteFileName + "成功下载到" + strFilePath + "用时" + time + "秒." + "平均下载速度:" + downloadSpeed+ "KB/秒");return success;}} catch (Exception e) {e.printStackTrace();logger.info(remoteFileName + "下载失败");} finally {if (null != outStream) {try {outStream.flush();outStream.close();} catch (IOException e) {e.printStackTrace();}}}if (success == false) {logger.info(remoteFileName + "下载失败!!!");}return success;}/**** 下载文件(公用方法)** @param remoteFileName     待下载文件名称* @param remoteDownLoadPath remoteFileName所在的路径*/public InputStream downloadFile(String remoteFileName,  String remoteDownLoadPath) {BufferedOutputStream outStream = null;boolean success = false;try {this.ftpClient.changeWorkingDirectory(remoteDownLoadPath);logger.info(remoteFileName + "开始下载1....");ftpClient.enterLocalPassiveMode();logger.info(remoteFileName + "开始下载2....");ftpClient.configure(new FTPClientConfig(remoteDownLoadPath)); //这里记得改成你放的位置
//			outStream = new BufferedOutputStream(new FileOutputStream(remoteDownLoadPath+remoteFileName));logger.info(remoteFileName + "开始下载3....");InputStream in = ftpClient.retrieveFileStream(remoteFileName);logger.info(remoteFileName + "开始下载....");return in;} catch (Exception e) {e.printStackTrace();return null;}}/**** 下载文件夹(子方法)** @param localDirectoryPath 本地地址* @param remoteDirectory    远程文件夹*/public boolean downLoadDirectorySub(String localDirectoryPath, String remoteDirectory) {try {String fileName = new File(remoteDirectory).getName();localDirectoryPath = localDirectoryPath + fileName + File.separator;new File(localDirectoryPath).mkdirs();this.ftpClient.enterLocalPassiveMode();FTPFile[] fileList = this.ftpClient.listFiles(remoteDirectory);for (int i = 0; i < fileList.length; i++) {if (!fileList[i].isDirectory()) {downloadFileSub(fileList[i].getName(), localDirectoryPath, remoteDirectory);}}for (int i = 0; i < fileList.length; i++) {if (fileList[i].isDirectory()) {String strRemoteDirectoryPath = remoteDirectory + "/" + fileList[i].getName();downLoadDirectorySub(localDirectoryPath, strRemoteDirectoryPath);}}} catch (IOException e) {e.printStackTrace();logger.info("下载文件夹失败");return false;}return true;}/*** 获取FTP当前目录下面所有文件(子方法)** @param remoteDirectory* @return* @throws ParseException*/public List<String> getFTPCurrentDirAllFileList(String remoteDirectory) throws ParseException {List<String> fileLists = new ArrayList<String>();FTPFile[] ftpFileList = null;try {ftpFileList = this.ftpClient.listFiles(remoteDirectory);} catch (IOException e) {e.printStackTrace();}if (ftpFileList != null && ftpFileList.length > 0) {for (FTPFile ff : ftpFileList) {if (ff.isFile()) {logger.info("fileNme:" + ff.getName());fileLists.add(ff.getName());}}}return fileLists;}public List<String> getFTPCurrentDirAllFileList2(String remoteDirectory,String filename) throws ParseException {List<String> fileLists = new ArrayList<String>();FTPFile[] ftpFileList = null;try {ftpFileList = this.ftpClient.listFiles(remoteDirectory);} catch (IOException e) {e.printStackTrace();}if (ftpFileList != null && ftpFileList.length > 0) {for (FTPFile ff : ftpFileList) {if (ff.isFile()&&ff.getName().equals(filename)) {logger.info("fileNme:" + ff.getName());fileLists.add(ff.getName());}}}return fileLists;}/*** 获取远程目录下面的某个类型的文件(子方法)** @param remoteDirectory* @return* @throws ParseException*/public List<String> getFTPDirTypeFileListSub(String remoteDirectory, String fileType) throws ParseException {List<String> fileLists = new ArrayList<String>();FTPFile[] ftpFileList = null;try {ftpFileList = this.ftpClient.listFiles(remoteDirectory);} catch (IOException e) {e.printStackTrace();}if (ftpFileList != null && ftpFileList.length > 0) {for (FTPFile ff : ftpFileList) {logger.info("fileNme:" + ff.getName());if (ff.isFile() && ff.getName().endsWith(fileType)) {fileLists.add(ff.getName());}}}return fileLists;}/*** 获取远程目录下面文件名包含地址字符串的文件(子方法)** @param remoteDirectory* @return* @throws ParseException*/public List<String> getFTPDirFileNameContainInputStrFileListsub(String remoteDirectory, String inputStr)throws ParseException {List<String> fileLists = new ArrayList<String>();FTPFile[] ftpFileList = null;try {ftpFileList = this.ftpClient.listFiles(remoteDirectory);} catch (IOException e) {e.printStackTrace();}if (ftpFileList != null && ftpFileList.length > 0) {for (FTPFile ff : ftpFileList) {logger.info("fileNme:" + ff.getName());if (ff.isFile() && ff.getName().contains(inputStr)) {fileLists.add(ff.getName());}}}return fileLists;}/*** 下载远程目录下面的指定文件前缀的文件列表(子方法)** @param remoteDirectory* @param fileNamePrefix* @return* @throws ParseException*/public List<String> getFTPDirFileNamePrefixFileListsub(String remoteDirectory, String fileNamePrefix)throws ParseException {List<String> fileLists = new ArrayList<String>();FTPFile[] ftpFileList = null;try {ftpFileList = this.ftpClient.listFiles(remoteDirectory);} catch (IOException e) {e.printStackTrace();}if (ftpFileList != null && ftpFileList.length > 0) {for (FTPFile ff : ftpFileList) {logger.info("fileNme:" + ff.getName());if (ff.isFile() && ff.getName().startsWith(fileNamePrefix)) {fileLists.add(ff.getName());}}}return fileLists;}/*********************** download function Parent End ***********************//************************ deleteRemote function Parent Start***********************//*** 删除远程指定目录下的所有文件(已封装)** @param strIp* @param tPort* @param user* @param password* @param remotePath*/public static void delteRemoteAppointDirFileList(String strIp, int tPort, String user, String password,String remotePath) {FTPEnhUtils ftp = new FTPEnhUtils(strIp, tPort, user, password);ftp.ftpLogin();ftp.delRemoteDirFileList(remotePath);ftp.ftpLogOut();}/*** 删除远程指定文件(已封装)** @param strIp* @param tPort* @param user* @param password* @param remotePath* @param remoteAppointFileName*/public static void delteRemoteAppointFile(String strIp, int tPort, String user, String password, String remotePath,String remoteAppointFileName) {FTPEnhUtils ftp = new FTPEnhUtils(strIp, tPort, user, password);ftp.ftpLogin();String remoteDelFilePath = remotePath + remoteAppointFileName;ftp.delete(remoteDelFilePath);ftp.ftpLogOut();}/*** 删除远程指定目录下的指定文件类型的文件列表(已封装)** @param strIp* @param tPort* @param user* @param password* @param remotePath* @param fileType*/public static void delteRemoteAppointFileTypeList(String strIp, int tPort, String user, String password,String remotePath, String fileType) {FTPEnhUtils ftp = new FTPEnhUtils(strIp, tPort, user, password);ftp.ftpLogin();ftp.delteRemoteAppointFileTypeListSub(remotePath, fileType);ftp.ftpLogOut();}/*** 删除远程指定目录下的指定文件名前缀的文件列表(已封装)** @param strIp* @param tPort* @param user* @param password* @param remotePath* @param fileNamePrefix*/public static void delteRemoteAppointFilePrefixList(String strIp, int tPort, String user, String password,String remotePath, String fileNamePrefix) {FTPEnhUtils ftp = new FTPEnhUtils(strIp, tPort, user, password);ftp.ftpLogin();ftp.delteRemoteAppointFilePrefixListSub(remotePath, fileNamePrefix);ftp.ftpLogOut();}/*** 删除远程指定目录下的文件名包含指定字符串的文件列表(已封装)** @param strIp* @param tPort* @param user* @param password* @param remotePath* @param inputStr*/public static void delteRemoteFileNameContainInptStrList(String strIp, int tPort, String user, String password,String remotePath, String inputStr) {FTPEnhUtils ftp = new FTPEnhUtils(strIp, tPort, user, password);ftp.ftpLogin();ftp.delteRemoteFileNameContainInptStrListSub(remotePath, inputStr);ftp.ftpLogOut();}/*** 删除远程指定目录下的所有文件(子方法)** @param remotePath*/public void delRemoteDirFileList(String remotePath) {FTPFile[] ftpFileList = null;try {ftpFileList = this.ftpClient.listFiles(remotePath);} catch (IOException e) {e.printStackTrace();}if (ftpFileList != null && ftpFileList.length > 0) {for (int i = 0; i < ftpFileList.length; i++) {FTPFile file = ftpFileList[i];if (file.isFile()) {logger.info("fileName:" + file.getName());try {this.ftpClient.deleteFile(remotePath + file.getName());} catch (IOException e) {e.printStackTrace();}}}}}/*** 删除远程指定目录下的指定文件类型的文件列表(子方法)** @param remotePath* @param fileType*/public void delteRemoteAppointFileTypeListSub(String remotePath, String fileType) {FTPFile[] ftpFileList = null;try {ftpFileList = this.ftpClient.listFiles(remotePath);} catch (IOException e) {e.printStackTrace();}if (ftpFileList != null && ftpFileList.length > 0) {for (int i = 0; i < ftpFileList.length; i++) {FTPFile file = ftpFileList[i];if (file.isFile() && file.getName().endsWith(fileType)) {logger.info("fileName:" + file.getName());try {this.ftpClient.deleteFile(remotePath + file.getName());} catch (IOException e) {e.printStackTrace();}}}}}/*** 删除远程指定目录下的指定文件名前缀的文件列表(已封装)** @param remotePath* @param fileNamePrefix*/public void delteRemoteAppointFilePrefixListSub(String remotePath, String fileNamePrefix) {FTPFile[] ftpFileList = null;try {ftpFileList = this.ftpClient.listFiles(remotePath);} catch (IOException e) {e.printStackTrace();}if (ftpFileList != null && ftpFileList.length > 0) {for (int i = 0; i < ftpFileList.length; i++) {FTPFile file = ftpFileList[i];if (file.isFile() && file.getName().startsWith(fileNamePrefix)) {logger.info("fileName:" + file.getName());try {this.ftpClient.deleteFile(remotePath + file.getName());} catch (IOException e) {e.printStackTrace();}}}}}/*** 删除远程指定目录下的指定文件名前缀的文件列表(子方法)** @param remotePath* @param inputStr*/public void delteRemoteFileNameContainInptStrListSub(String remotePath, String inputStr) {FTPFile[] ftpFileList = null;try {ftpFileList = this.ftpClient.listFiles(remotePath);} catch (IOException e) {e.printStackTrace();}if (ftpFileList != null && ftpFileList.length > 0) {for (int i = 0; i < ftpFileList.length; i++) {FTPFile file = ftpFileList[i];if (file.isFile() && file.getName().contains(inputStr)) {logger.info("fileName:" + file.getName());try {this.ftpClient.deleteFile(remotePath + file.getName());} catch (IOException e) {e.printStackTrace();}}}}}/*** 删除远程指定文件(子方法)** @param pathname*/public void delete(String pathname) {try {this.ftpClient.deleteFile(pathname);} catch (IOException e) {e.printStackTrace();}}/************************ deleteRemote function Parent End***********************//************************ deleteLocal function Parent Start***********************//*** 删除本地目录下文件列表** @param mDeleteLocalFileListPath*/public static void delLocalDirFileList(String mDeleteLocalFileListPath) {File file = new File(mDeleteLocalFileListPath);File[] f1 = file.listFiles();for (File ff : f1) {System.out.println("fileName:" + ff.getName());if (ff.isFile()) {ff.delete();}}}/*** 删除本地目录指定文件类型的文件列表(忽略大小写)** @param mDeleteLocalFileListPath* @param mFileType*/public static void delLocalDirFileList(String mDeleteLocalFileListPath, String mFileType) {File file = new File(mDeleteLocalFileListPath);File[] f1 = file.listFiles();for (File ff : f1) {System.out.println("fileName:" + ff.getName());if (ff.isFile() && ff.getName().toLowerCase().endsWith(mFileType)) {ff.delete();}}}/*** 删除本地目录指定文件类型的文件并且文件名中包含传入日期的文件列表(忽略大小写)** @param mDeleteLocalFileListPath* @param mFileType* @param mInputDate*/public static void delLocalDirFileList(String mDeleteLocalFileListPath, String mFileType, String mInputDate) {File file = new File(mDeleteLocalFileListPath);File[] f1 = file.listFiles();for (File ff : f1) {System.out.println("fileName:" + ff.getName());if (ff.isFile() && ff.getName().toLowerCase().endsWith(mFileType) && ff.getName().contains(mInputDate)) {ff.delete();}}}/*** 删除本地目录下面文件名中包含传入日期的文件列表**/public static void delLocalDirFileNameContainInputDate(String mDeleteLocalFileListPath, String mInputDate) {File file = new File(mDeleteLocalFileListPath);File[] f1 = file.listFiles();for (File ff : f1) {System.out.println("fileName:" + ff.getName());if (ff.isFile() && ff.getName().contains(mInputDate)) {ff.delete();}}}/*** 删除本地目录下面文件名中包含传入字符串的文件列表(忽略大小写)**/public static void delLocalDirFileNameContainInputStr(String mDeleteLocalFileListPath, String mInputStr) {File file = new File(mDeleteLocalFileListPath);File[] f1 = file.listFiles();for (File ff : f1) {System.out.println("fileName:" + ff.getName());if (ff.isFile() && ff.getName().toLowerCase().contains(mInputStr)) {ff.delete();}}}/*** 删除本地目录下面文件名指定前缀并且包含传入日期的文件列表(忽略大小写)** @param mDeleteLocalFileListPath* @param mPrefix* @param mInputDate*/public static void delLocalDirFileNameContainInputDate(String mDeleteLocalFileListPath, String mPrefix,String mInputDate) {File file = new File(mDeleteLocalFileListPath);File[] f1 = file.listFiles();for (File ff : f1) {System.out.println("fileName:" + ff.getName());if (ff.isFile() && ff.getName().toLowerCase().startsWith(mPrefix) && ff.getName().contains(mInputDate)) {ff.delete();}}}/*** 删除本地目录下面文件名指定前缀的文件列表(忽略大小写)** @param mDeleteLocalFileListPath* @param mPrefix*/public static void delLocalDirFileNameSpPrefixFileList(String mDeleteLocalFileListPath, String mPrefix) {File file = new File(mDeleteLocalFileListPath);File[] f1 = file.listFiles();for (File ff : f1) {System.out.println("fileName:" + ff.getName());if (ff.isFile() && ff.getName().toLowerCase().startsWith(mPrefix)) {ff.delete();}}}/*** 删除本地目录下面文件名指定前缀和索引的文件列表(忽略大小写)** @param mDeleteLocalFileListPath* @param mPrefix*/public static void delLocalDirFileNameSpPrefixFileList(String mDeleteLocalFileListPath, String mPrefix, int index) {File file = new File(mDeleteLocalFileListPath);File[] f1 = file.listFiles();for (File ff : f1) {System.out.println("fileName:" + ff.getName());if (ff.isFile() && ff.getName().toLowerCase().startsWith(mPrefix, index)) {ff.delete();}}}/*** 删除本地目录指定文件类型的文件列表(不忽略大小写)** @param mDeleteLocalFileListPath* @param mFileType*/public static void delLocalDirFileList2(String mDeleteLocalFileListPath, String mFileType) {File file = new File(mDeleteLocalFileListPath);File[] f1 = file.listFiles();for (File ff : f1) {System.out.println("fileName:" + ff.getName());if (ff.isFile() && ff.getName().endsWith(mFileType)) {ff.delete();}}}/************************ deleteLocal function Parent End***********************//*** 获取FTP目录当前日期下面所有文件** @return* @throws ParseException*/public  List<String> getCurrentDirAllFileList(String localPath, String strDate) throws ParseException {List<String> list = new ArrayList<String>();// 获得指定目录下所有文件名File file = new File(localPath);File[] listFiles = null;listFiles = file.listFiles();if (listFiles != null && listFiles.length > 0) {for (File ff : listFiles) {if (ff.isFile() && ff.getName().contains(strDate)) {list.add(ff.getName());}}}return list;}// FtpClient的Set 和 Get 函数public FTPClient getFtpClient() {return ftpClient;}public void setFtpClient(FTPClient ftpClient) {this.ftpClient = ftpClient;}
}

三、ftp实战

① 下载集合测试

package com.gblfy.controller;import com.gblfy.config.BaseConfig;
import com.gblfy.utils.FTPEnhUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;/*** @author gblfy* @Description 下载集合* @Date 2020/1/2 15:05* @version1.0*/
@Controller
public class DownloadAssemble {@Autowiredprivate BaseConfig baseConfig;/******************************* DownloadAssemble Start *******************************//*** 下载远程目录下指定文件至本地目录(已封装)** @return*/@GetMapping("/downloadRemoteDirAppointFile")@ResponseBodypublic String downloadRemoteDirAppointFile() {FTPEnhUtils.downloadRemoteDirAppointFile(baseConfig.getIpAddress(), baseConfig.getPort(), baseConfig.getUserName(),baseConfig.getPassWd(), baseConfig.getRemoteDirAppointFile(), baseConfig.getLocalSaveDir(), baseConfig.getRemoteDownLoadDir());return "下载完成!!!";}/*** 下载远程目录下面的某个类型的文件列表(已封装)** @return*/@GetMapping("/downloadFTPDirAppointFileTypeList")@ResponseBodypublic String downloadFTPDirAppointFileTypeList() {FTPEnhUtils.downloadFTPDirAppointFileTypeList(baseConfig.getIpAddress(), baseConfig.getPort(), baseConfig.getUserName(),baseConfig.getPassWd(), baseConfig.getLocalSaveDir(), baseConfig.getRemoteDownLoadDir(), baseConfig.getFileType());return "下载完成!!!";}/*** 下载远程目录下面的文件名包含指定字符串的文件列表(已封装)** @return*/@GetMapping("/downloadFTPDirFileContainInputStrList")@ResponseBodypublic String downloadFTPDirFileContainInputStrList() {FTPEnhUtils.downloadFTPDirFileContainInputStrList(baseConfig.getIpAddress(), baseConfig.getPort(), baseConfig.getUserName(),baseConfig.getPassWd(), baseConfig.getLocalSaveDir(), baseConfig.getRemoteDownLoadDir(), baseConfig.getInputStr());return "下载完成!!!";}/*** 下载远程目录下面的指定文件前缀的文件列表(已封装)** @return*/@GetMapping("/downloadFTPDirFileNameprefixList")@ResponseBodypublic String downloadFTPDirFileNameprefixList() {FTPEnhUtils.downloadFTPDirFileNameprefixList(baseConfig.getIpAddress(), baseConfig.getPort(), baseConfig.getUserName(),baseConfig.getPassWd(), baseConfig.getLocalSaveDir(), baseConfig.getRemoteDownLoadDir(), baseConfig.getFileNamePrefix());return "下载完成!!!";}/*** 下载远程目录下的文件列表(已封装)** @return*/@GetMapping("/downloadAllFilesInTheRemoteDirectory")@ResponseBodypublic String downloadAllFilesInTheRemoteDirectory() {FTPEnhUtils.downloadAllFilesInTheRemoteDirectory(baseConfig.getIpAddress(), baseConfig.getPort(), baseConfig.getUserName(),baseConfig.getPassWd(), baseConfig.getLocalSaveDir(), baseConfig.getRemoteDownLoadDir());return "下载完成!!!";}/*** 下载远程文件夹至本地目录(已封装)** @return*/@GetMapping("/downloadRemoteFolders")@ResponseBodypublic String downloadRemoteFolders() {FTPEnhUtils.downloadRemoteFolders(baseConfig.getIpAddress(), baseConfig.getPort(), baseConfig.getUserName(),baseConfig.getPassWd(), baseConfig.getLocalSaveDir(), baseConfig.getRemoteDownLoadDir());return "下载完成!!!";}/******************************* DownloadAssemble End *******************************/
}

② 上传集合测试

package com.gblfy.controller;import com.gblfy.config.BaseConfig;
import com.gblfy.utils.FTPEnhUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;/*** @author gblfy* @ClassNme UploadAssemble* @Description 上传集合* @Date 2020/1/3 14:52* @version1.0*/
@Controller
public class UploadAssemble {@Autowiredprivate BaseConfig baseConfig;/******************************* UploadAssemble Start *******************************//*** 上传本地文件夹至远程目录(已封装)** @return*/@GetMapping("/uploadLocalDirToRemotePath")@ResponseBodypublic String uploadLocalDirToRemotePath() {FTPEnhUtils.uploadLocalDirToRemotePath(baseConfig.getIpAddress(), baseConfig.getPort(), baseConfig.getUserName(),baseConfig.getPassWd(), baseConfig.getLocalSyncFileDir(), baseConfig.getRomoteUpLoadePath());return "上传完成!!!";}/*** 上传本地目录下文件列表至远程目录(已封装)** @return*/@GetMapping("/uploadLocalDirFiletListToRemoteDir")@ResponseBodypublic String uploadLocalDirFiletListToRemoteDir() {FTPEnhUtils.uploadLocalDirFiletListToRemoteDir(baseConfig.getIpAddress(), baseConfig.getPort(), baseConfig.getUserName(),baseConfig.getPassWd(), baseConfig.getLocalSyncFileDir(), baseConfig.getRomoteUpLoadePath());return "上传完成!!!";}/*** 上传本地指定文件至远程目录(已封装)** @return*/@GetMapping("/uploadLocalSpFileToRemotePath")@ResponseBodypublic String uploadLocalSpFileToRemotePath() {FTPEnhUtils.uploadLocalSpFileToRemotePath(baseConfig.getIpAddress(), baseConfig.getPort(), baseConfig.getUserName(),baseConfig.getPassWd(), baseConfig.getAppointFileName(), baseConfig.getRomoteUpLoadePath());return "上传完成!!!";}/*** 上传本地指定文件类型的文件至远程目录(已封装)** @return*/@GetMapping("/uploadLocalSpFileTypeToRemotePath")@ResponseBodypublic String uploadLocalSpFileTypeToRemotePath() {FTPEnhUtils.uploadLocalSpFileTypeToRemotePath(baseConfig.getIpAddress(), baseConfig.getPort(), baseConfig.getUserName(),baseConfig.getPassWd(), baseConfig.getLocalSyncFileDir(), baseConfig.getRomoteUpLoadePath(), baseConfig.getFileType());return "上传完成!!!";}/*** 上传本地指定文件名包含指定字符串的文件至远程目录(已封装)** @return*/@GetMapping("/uploadLocalSpFileNameContainStrToRemotePath")@ResponseBodypublic String uploadLocalSpFileNameContainStrToRemotePath() {FTPEnhUtils.uploadLocalSpFileNameContainStrToRemotePath(baseConfig.getIpAddress(), baseConfig.getPort(), baseConfig.getUserName(),baseConfig.getPassWd(), baseConfig.getLocalSyncFileDir(), baseConfig.getRomoteUpLoadePath(), baseConfig.getInputStr());return "上传完成!!!";}/*** 上传本地指定文件名前缀的文件至远程目录(已封装)** @return*/@GetMapping("/uploadLocalDirFileNameSpPrefixFileList")@ResponseBodypublic String uploadLocalDirFileNameSpPrefixFileList() {FTPEnhUtils.uploadLocalDirFileNameSpPrefixFileList(baseConfig.getIpAddress(), baseConfig.getPort(), baseConfig.getUserName(),baseConfig.getPassWd(), baseConfig.getLocalSyncFileDir(), baseConfig.getRomoteUpLoadePath(), baseConfig.getFileNamePrefix());return "上传完成!!!";}/******************************* UploadAssemble End *******************************/}

③ 删除集合测试

package com.gblfy.controller;import com.gblfy.config.BaseConfig;
import com.gblfy.utils.FTPEnhUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;/*** @author gblfy* @Description 删除集合* @Date 2020/1/2 15:05* @version1.0*/
@Controller
public class DelAssemble {@Autowiredprivate BaseConfig baseConfig;/******************************* DelAssemble Start *******************************//*** 删除远程指定目录下的所有文件(已封装)** @return*/@GetMapping("/delteRemoteAppointDirFileList")@ResponseBodypublic String delteRemoteAppointDirFileList() {FTPEnhUtils.delteRemoteAppointDirFileList(baseConfig.getIpAddress(), baseConfig.getPort(), baseConfig.getUserName(),baseConfig.getPassWd(), baseConfig.getRomoteDelPath());return "删除完成!!!";}/*** 删除远程指定文件(已封装)** @return*/@GetMapping("/delteRemoteAppointFile")@ResponseBodypublic String delteRemoteAppointFile() {FTPEnhUtils.delteRemoteAppointFile(baseConfig.getIpAddress(), baseConfig.getPort(), baseConfig.getUserName(),baseConfig.getPassWd(), baseConfig.getRomoteDelPath(), baseConfig.getAppointFileName());return "删除完成!!!";}/*** 删除远程指定目录下的指定文件类型的文件列表(已封装)** @return*/@GetMapping("/delteRemoteAppointFileTypeList")@ResponseBodypublic String delteRemoteAppointFileTypeList() {FTPEnhUtils.delteRemoteAppointFileTypeList(baseConfig.getIpAddress(), baseConfig.getPort(), baseConfig.getUserName(),baseConfig.getPassWd(), baseConfig.getRomoteDelPath(), baseConfig.getFileType());return "删除完成!!!";}/*** 删除远程指定目录下的指定文件名前缀的文件列表(已封装)** @return*/@GetMapping("/delteRemoteAppointFilePrefixList")@ResponseBodypublic String delteRemoteAppointFilePrefixList() {FTPEnhUtils.delteRemoteAppointFilePrefixList(baseConfig.getIpAddress(), baseConfig.getPort(), baseConfig.getUserName(),baseConfig.getPassWd(), baseConfig.getRomoteDelPath(), baseConfig.getFileNamePrefix());return "删除完成!!!";}/*** 删除远程指定目录下的文件名包含指定字符串的文件列表(已封装)** @return*/@GetMapping("/delteRemoteFileNameContainInptStrList")@ResponseBodypublic String delteRemoteFileNameContainInptStrList() {FTPEnhUtils.delteRemoteFileNameContainInptStrList(baseConfig.getIpAddress(), baseConfig.getPort(), baseConfig.getUserName(),baseConfig.getPassWd(), baseConfig.getRomoteDelPath(), baseConfig.getInputStr());return "删除完成!!!";}/******************************* DelAssemble End *******************************/
}

项目源码:

https://github.com/gb-heima/file-assemble

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/521950.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Logtail从入门到精通(一):日志采集杂谈

摘要&#xff1a; 目前logtail已承载阿里云全站、所有云产品服务、全球各Region部署、阿里巴巴集团&#xff08;淘宝、天猫、菜鸟等&#xff09;上重要服务的数据采集。每天采集接近百万服务器上数PB的实时数据&#xff0c;对接数千个应用与消费者。什么是日志提到日志&#xf…

互联网大佬马老师于昨日教师节正式卸任,让位现任CEO张勇;华为发布新一代CloudLink视讯解决方案,普惠4K+AI;联通……...

关注并标星星CSDN云计算极客头条&#xff1a;速递、最新、绝对有料。这里有企业新动、这里有业界要闻&#xff0c;打起十二分精神&#xff0c;紧跟fashion你可以的&#xff01;每周三次&#xff0c;打卡即read更快、更全了解泛云圈精彩newsgo go go OPPO Reno2正式发布&#xf…

python输出不重复的单词_Python情感分析(比较单词时,不计算文本中重复的单词)...

您可以使用嵌套的for loop来实现这一点&#xff0c;但是这并不是解决简单问题的好方法&#xff1a;for posWord in posWords:for test in readFile:if i test:counter 1print iprint(counter)这并不是分析情绪的有效方法&#xff0c;相反&#xff0c;你只是在检查文本中是否存…

Logtail从入门到精通(二):开启日志采集之旅

摘要&#xff1a; 为了更好的了解日志采集&#xff0c;这里我们首先对日志采集中遇到的基本概念进行简要的介绍。Logtail相关概念为了更好的了解日志采集&#xff0c;这里我们首先对日志采集中遇到的基本概念进行简要的介绍。概念介绍项目&#xff1a; 项目&#xff08;Project…

java数组下标越界_在java中,解决数组下标越界的问题

//获取文本内容publicstaticListgetText(StringfilePath){ListsimplesnewArrayList();try{FileReaderreadernewFileReader(filePath);BufferedReaderbfRead...// 获取文本内容public static List getText(String filePath) {List simples new ArrayList();try {FileReader read…

vsftpd常用操作

适用于Centos7.x 作用命令启动systemctl start vsftpd.service关闭systemctl stop vsftpd.service重启systemctl restart vsftpd.service查看运行状态systemctl status vsftpd.service设置开机启动systemctl enable vsftpd.service在线安装yum install -y vsftpd源码安装rpm -…

关于SDN的未来,Linux基金会专访阿里云网络大神

摘要&#xff1a; 近日&#xff0c;大家熟知的国际开源组织Linux基金会与阿里云进行了一次访谈。专访了阿里云网络团队掌门人江鹤。江鹤执掌阿里云网络产品线&#xff0c;并负责阿里集团网络虚拟化产品的研发管理工作。在软件定义网络&#xff08;SDN&#xff09;和网络功能虚拟…

5G 共建共享,究竟会带来什么影响?

戳蓝字“CSDN云计算”关注我们哦&#xff01;共建共享真的来了。根据9月9日中国联通发布的公告&#xff0c;中国联通和中国电信正式签署了《5G网络共建共享框架合作协议书》&#xff0c;将在全国范围内合作共建一张5G接入网络。图片来源网络小枣君认为&#xff0c;这一事件对于…

java 纳秒 毫秒_golang的time包:秒、毫秒、纳秒时间戳输出方式

菜鸟的时候只知道时间戳有10位、13位、还有好长位数的。入坑久了才明白10位数的时间戳是以 秒 为单位&#xff1b;13位数的时间戳是以 毫秒 为单位&#xff1b;19位数的时间戳是以 纳秒 为单位&#xff1b;golang中可以这样写&#xff1a;package mainimport ("time"…

object转float_人工智能-Object Detection API 模型转tflite并验证

最近在用TensorFlow Object Detection API训练目标检测模型&#xff0c;训练好的pb模型大小17.6M&#xff0c;用pb预测效果不错&#xff0c;于是想着如何在手机端运行&#xff0c;查看官网关于tflite的转换&#xff0c;网址&#xff1a;https://github.com/tensorflow/models/b…

Multi Task Learning在工业界如何更胜一筹

摘要&#xff1a; 本文主要介绍多任务学习和单任务学习的对比优势以及在工业界的一些使用。如何从单任务学习转变为多任务学习&#xff1f;怎样使AUC和预估的准确率达到最佳&#xff1f;如何对实时性要求较高的在线应用更加友好&#xff1f;本文将以淘宝实例为大家进行分享多任…

rsync一行代码实现远程文件同步之修改默认22端口

由于需求需要把应用服务器上的日志文件同步到文件服务器上&#xff0c;但是又不能用22端口 文章目录一、应用服务器脚本修改如下二、文件服务器操作三、执行脚本测试四、应用服务器生成ssh key五、文件服务器添加key5.1. 打开.ssh文件夹目录&#xff1a;5.2. 创建authorized_ke…

上云难?TA霸气回应:不要你觉得,一键上云 so easy!

戳蓝字“CSDN云计算”关注我们哦&#xff01;图片来源网络2019年阿里提出的“All in Cloud”战略以及《全球云计算 IT 基础设施市场预测报告》的数据结果&#xff0c;都在表明企业上云已成不可逆之势&#xff1b;但上云事故接二连三发生似乎又在宣示企业上云之路道阻且长&#…

基于阿里云HiTSDB搭建工业物联网平台实践

摘要&#xff1a; 基于阿里云全面的物联网、云计算与大数据技术搭建云端的企业能源管理物联网平台实现能耗数据采集、统计分析、平衡调度、节能优化等全面的能源管控协同平台。是企业生产运行保障的利器&#xff0c;也是大量企业实现云上管理的实践案例。背景工业企业的能耗占了…

java对象深克隆_JAVA中对象的克隆及深拷贝和浅拷贝

使用场景&#xff1a;在日常的编程过程 中&#xff0c;经常会遇到&#xff0c;有一个对象OA&#xff0c;在某一时间点OA中已经包含了一些有效值 &#xff0c;此时可能会需一个和OA完全相对的新对象OB&#xff0c;并且要在后面的操作中对OB的任何改动都不会影响到OA的值&#xf…

python安装pyserial模块_Python使用模块Pyserial模块报

用pip安装pyserial后:sudo -H pip install pyserial&#xff0c;运行新建的程序&#xff0c;名称为serial.py&#xff0c;程序中用到:import serial.toos.list_ports,但总是提示ImportError:No module named tools.list_ports&#xff0c;在度娘一顿乱搜后&#xff0c;在stack…

阿里巴巴开源的通用缓存访问框架JetCache介绍

摘要&#xff1a; JetCache是由阿里巴巴开源的通用缓存访问框架&#xff0c;如果你对Spring Cache很熟悉的话&#xff0c;请一定花一点时间了解一下JetCache&#xff0c;它更好用。JetCache可以做类似Spring Cache的注解式缓存&#xff0c;支持TTL、多级缓存、分布式自动刷新&a…

mysql数据库的总结

https://blog.csdn.net/LanlanDeming/article/details/103786146

写速度提升20%,Elasticsearch 创始人给腾讯云发来感谢信

近日&#xff0c;Elasticsearch 的创始人兼首席执行官Shay Banon 向腾讯云发出了一封“特別”的邮件&#xff0c;专程对腾讯团队为Elasticsearch开源社区做出的贡献表示了感谢。 据了解&#xff0c;腾讯工程师通过提交代码&#xff0c;成功优化了Elasticsearch高并发写入性能&…

阿里深度学习的“金刚钻”——千亿特征XNN算法及其落地实践

摘要&#xff1a;随着十二点的钟声响起&#xff0c;无数人盯着购物车开启了一年一度的“剁手”之旅。可你有没有想过这购物狂欢的背后是什么支撑起了数据规模如此庞大的计算任务&#xff1f;其实不只是“双十一”&#xff0c;每一个用户的点击和浏览&#xff0c;每一件宝贝的排…