package com.tao.ftpserver.utils;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
public class FtpFileUtils {
public static FTPClient login(String ip ,Integer port ,String username, String password) {
FTPClient ftpClient = null;
try {
ftpClient = new FTPClient();
ftpClient.connect(ip, port);
ftpClient.login(username, password);
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
ftpClient.enterLocalPassiveMode();
ftpClient.setBufferSize(1024*1024*100);
} catch (IOException e) {
e.printStackTrace();
}
return ftpClient;
}
private static String handleFile(String file) {
String text = file.replaceAll(".exe", "");
return text;
}
public static ResultUtils downloadFile(FTPClient ftpClient,String sourceFile,String sourceName,String targetFile) {
OutputStream ios = null;
File localFile = null;
try {
String[] fileRoute = sourceFile.split("/");
for(int i = 0; i < fileRoute.length; i++) {
ftpClient.changeWorkingDirectory(fileRoute[i]);
}
FTPFile[] listFiles = ftpClient.listFiles(sourceName);
if(listFiles.length > 0) {
localFile = new File(targetFile+"/"+listFiles[0].getName());
if(!localFile.exists()) {
ios = new FileOutputStream(localFile);
ftpClient.retrieveFile(listFiles[0].getName(), ios);
}
}
} catch (IOException e) {
e.printStackTrace();
return new ResultUtils("下载失败",0,false,ftpClient);
}finally {
try {
if(ios != null) {
ios.close();
}
close(ftpClient);
}catch(Exception e) {
e.printStackTrace();
}
}
return new ResultUtils("下载成功",1,true,ftpClient);
}
private static void close(FTPClient ftpClient) {
try {
ftpClient.logout();
ftpClient.disconnect();
} catch (IOException e) {
e.printStackTrace();
}
}
public static int uploadFile(FTPClient ftpClient, File file,List<String> fileRoute,String materialId,String name) {
FileInputStream input = null;
long startTime = 0;
long endTime = 0;
try {
input = new FileInputStream(file);
for(int i = 0; i < fileRoute.size(); i++) {
ftpClient.makeDirectory(fileRoute.get(i));
ftpClient.changeWorkingDirectory(fileRoute.get(i));
}
startTime = System.currentTimeMillis();
ftpClient.storeFile( materialId+"."+name, input);
endTime = System.currentTimeMillis();
System.out.println(endTime - startTime);
}catch (IOException e) {
e.printStackTrace();
}finally {
close(ftpClient);
if(input != null) {
try {
input.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return (int) (endTime - startTime);
}
public static void main(String[] args) {
FTPClient ftpClient = login("192.168.11.1",21,"anonymous","anonymous");
File file = new File("D:/all/practice/Downloads.rar");
List<String> fileRoute = new ArrayList<String>();
fileRoute.add("1");
fileRoute.add("2");
"D:/all/practice/ftp");
}
}
- uploadFile,上传指定文件到配置的ftp路径
- downloadFile,下载指定的文件到本地自定义路径