packagecom.yxjr.mytest;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.IOException;importjava.io.InputStream;importjava.io.OutputStream;importcom.yxjr.common.utils.UUIDUtils;importorg.apache.commons.net.ftp.FTPClient;importorg.apache.commons.net.ftp.FTPFile;importorg.apache.commons.net.ftp.FTPReply;/*** FTP服务器工具类*/
public classFTPUtils {/*** 上传文件至FTP服务器
*
*@paramurl 服务器IP地址
*@paramport 服务器端口
*@paramuserName 用户登录名
*@parampassword 用户登录密码
*@paramstorePath 服务器文件存储路径
*@paramfileName 服务器文件存储名称
*@paramis 文件输入流
*@returntrue:上传成功
*
* false:上传失败*/
public static boolean storeFile(String url, intport, String userName, String password, String storePath, String fileName, InputStream is) {boolean result = false;
FTPClient ftp= newFTPClient();try{//连接至服务器,端口默认为21时,可直接通过URL连接
ftp.connect(url, port);//登录服务器
ftp.login(userName, password);//判断返回码是否合法
if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) {//不合法时断开连接
ftp.disconnect();//结束程序
returnresult;
}//判断ftp目录是否存在,如果不存在则创建目录,包括创建多级目录
String s = "/" +storePath;
String[] dirs= s.split("/");
ftp.changeWorkingDirectory("/");//按顺序检查目录是否存在,不存在则创建目录
for (int i = 1; dirs != null && i < dirs.length; i++) {if (!ftp.changeWorkingDirectory(dirs[i])) {if(ftp.makeDirectory(dirs[i])) {if (!ftp.changeWorkingDirectory(dirs[i])) {return false;
}
}else{return false;
}
}
}//设置文件操作目录
ftp.changeWorkingDirectory(storePath);//设置文件类型,二进制
ftp.setFileType(FTPClient.BINARY_FILE_TYPE);//设置缓冲区大小
ftp.setBufferSize(3072);//上传文件
result =ftp.storeFile(fileName, is);//关闭输入流
is.close();//登出服务器
ftp.logout();
}catch(IOException e) {
e.printStackTrace();
}finally{try{//判断输入流是否存在
if (null !=is) {//关闭输入流
is.close();
}//判断连接是否存在
if(ftp.isConnected()) {//断开连接
ftp.disconnect();
}
}catch(IOException e) {
e.printStackTrace();
}
}returnresult;
}/*** 从FTP服务器下载文件至本地
*
*@paramurl 服务器IP地址
*@paramport 服务器端口
*@paramuserName 用户登录名
*@parampassword 用户登录密码
*@paramremotePath 服务器文件存储路径
*@paramfileName 服务器文件存储名称
*@paramlocalPath 本地文件存储路径
*@returntrue:下载成功
*
* false:下载失败*/
public static boolean retrieveFile(String url, intport, String userName, String password, String remotePath, String fileName, String localPath) {boolean result = false;
FTPClient ftp= newFTPClient();
OutputStream os= null;try{//连接至服务器,端口默认为21时,可直接通过URL连接
ftp.connect(url, port);//登录服务器
ftp.login(userName, password);//判断返回码是否合法
if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) {//不合法时断开连接
ftp.disconnect();//结束程序
returnresult;
}//设置文件操作目录
ftp.changeWorkingDirectory(remotePath);//设置文件类型,二进制
ftp.setFileType(FTPClient.BINARY_FILE_TYPE);//设置缓冲区大小
ftp.setBufferSize(3072);//设置字符编码
ftp.setControlEncoding("UTF-8");//构造本地文件对象
File localFile = new File(localPath + "/" +fileName);//获取文件操作目录下所有文件名称
String[] remoteNames =ftp.listNames();//循环比对文件名称,判断是否含有当前要下载的文件名
for(String remoteName : remoteNames) {if(fileName.equals(remoteName)) {
result= true;
}
}//文件名称比对成功时,进入下载流程
if(result) {//构造文件输出流
os = newFileOutputStream(localFile);//下载文件
result =ftp.retrieveFile(fileName, os);//关闭输出流
os.close();
}//登出服务器
ftp.logout();
}catch(IOException e) {
e.printStackTrace();
}finally{try{//判断输出流是否存在
if (null !=os) {//关闭输出流
os.close();
}//判断连接是否存在
if(ftp.isConnected()) {//断开连接
ftp.disconnect();
}
}catch(IOException e) {
e.printStackTrace();
}
}returnresult;
}/*** 从FTP服务器删除文件
*
*@paramurl 服务器IP地址
*@paramport 服务器端口
*@paramuserName 用户登录名
*@parampassword 用户登录密码
*@paramremotePath 服务器文件存储路径
*@paramfileName 服务器文件存储名称
*@returntrue:删除成功
*
* false:删除失败*/
public static boolean deleteFile(String url, intport, String userName, String password, String remotePath, String fileName) {boolean result = false;
FTPClient ftp= newFTPClient();try{//连接至服务器,端口默认为21时,可直接通过URL连接
ftp.connect(url, port);//登录服务器
ftp.login(userName, password);//判断返回码是否合法
if (!FTPReply.isPositiveCompletion(ftp.getReplyCode())) {//不合法时断开连接
ftp.disconnect();//结束程序
returnresult;
}//设置文件操作目录
ftp.changeWorkingDirectory(remotePath);//设置文件类型,二进制
ftp.setFileType(FTPClient.BINARY_FILE_TYPE);//设置缓冲区大小
ftp.setBufferSize(3072);//设置字符编码
ftp.setControlEncoding("UTF-8");//获取文件操作目录下所有文件名称
String[] remoteNames =ftp.listNames();//循环比对文件名称,判断是否含有当前要下载的文件名
for(String remoteName : remoteNames) {if(fileName.equals(remoteName)) {
result= true;
}
}//文件名称比对成功时,进入删除流程
if(result) {//删除文件
result =ftp.deleteFile(fileName);
}//登出服务器
ftp.logout();
}catch(IOException e) {
e.printStackTrace();
}finally{try{//判断连接是否存在
if(ftp.isConnected()) {//断开连接
ftp.disconnect();
}
}catch(IOException e) {
e.printStackTrace();
}
}returnresult;
}public static void main(String[] args) throwsFileNotFoundException {try{
FileInputStream fis= new FileInputStream(new File("C:\\Users\\Administrator\\Desktop\\太行后台socket发送工具1.txt"));
System.out.println(storeFile("10.8.66.22", 21, "admin", "1", "D:\\FTP\\test", UUIDUtils.randomUUID() + ".txt", fis));//File file = new File("D:\\upload\\20191217070411_start.txt");//InputStream is = new FileInputStream(file);//System.out.println(storeFile("10.8.66.22", 21, "admin", "1", "D:\\FTP\\test", "2.txt", is));//System.out.println(retrieveFile("10.8.66.22", 21, "admin", "1", "D:\\FTP\\test", "2.txt", "D:\\upload"));//System.out.println(deleteFile("10.8.66.22", 21, "admin", "1", "D:\\FTP\\test", "2.txt"));
} catch(FileNotFoundException e) {
e.printStackTrace();
}
}
}