一、带入ftp客户端相关的jar
<!-- ftp连接start -->
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>3.5</version>
</dependency>
<!-- ftp连接end-->
二、新建FTPClient客户端
public static FTPClient init(){
FTPClient ftpClient = new FTPClient();
try {
// 连接FTP服务器
ftpClient.connect(HOSTNAME, PORT);
//获取服务器返回码
int reply = ftpClient.getReplyCode();
//验证服务器是否连接成功
if (!FTPReply.isPositiveCompletion(reply)) {
ftpClient.disconnect();
logger.error("FTPServer 拒绝连接");
return null;
}
// 登录FTP服务器
boolean result =ftpClient.login(USERNAME, PASSWORD);
//验收是否登录成功
if (!result) {
logger.error("ftpClient登陆失败!");
throw new Exception("ftpClient登陆失败! userName:"+ USERNAME + " ; password:"
+ PASSWORD);
}
//设置传输的编码格式
ftpClient.setControlEncoding("UTF-8");
//设置文件类型(这个采用二进制格式)
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
//设置为主动模式(pass)
ftpClient.enterLocalPassiveMode();
//创建目录
ftpClient.makeDirectory(PATHNAME);
//切换到新建的目录
ftpClient.changeWorkingDirectory(PATHNAME);
}catch (Exception e) {
logger.equals(e);
}
return ftpClient;
}
三、上传文件
ftpClient.storeFile(fileName , inputStream);
其中fileName是保存在ftp中的文件名,inputString为文件的内容;
四、下载文件
列出ftp当前目录下的所有文件,如果文件名相同,则保存文件到本地
FTPFile[] ftpFiles = ftpClient.listFiles();
FTPFile file=ftpFiles[0];
OutputStream os = new FileOutputStream(localFile);
ftpClient.retrieveFile(file.getName(), os);
其中localFile为本地的文件路径,file位ftp服务器的文件
五、删除文件
ftpClient.dele(pathname);
pathname为ftp服务器文件路径
六、删除文件夹与文件夹下面的所有子文件和文件夹
列出所有文件和文件夹,然后用遍历删除所有文件
FTPFile[] files = ftpClient.listFiles(ftpPath);
删除文件夹
flag = ftpClient.removeDirectory(ftpPath);
7、代码如下:
mport java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
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.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.eakom.common.util.ftpPool.FTPClientFactory;
public class TestFTPClient {
private static Logger logger = LoggerFactory.getLogger(TestFTPClient.class);
/**FTP服务器的IP地址*/
private static final String HOSTNAME="192.168.158.98";
/**FTP服务器的端口*/
private static final int PORT=21;
/**FTP服务器的登录名*/
private static final String USERNAME="ftpadmin";
/**FTP服务器的密码*/
private static final String PASSWORD="eakom123456";
/**FTP服务器的操作路径*/
private static final String PATHNAME="/home/ftpadmin/aa";
public static void main(String[] args) throws UnsupportedEncodingException {
InputStream inputStream = null;
try {
String path="C:/Users/Administrator/Desktop/44/中文.txt";
File file = new File(path);
inputStream = new FileInputStream(file);
FTPClient ftpClient=init();
String fileName = file.getName();
boolean flag = ftpClient.storeFile(new String(fileName.getBytes("GBK"), "iso-8859-1") , inputStream);
System.out.println(flag);
} catch (IOException e) {
logger.error("上传失败",e);
}
}
/**
* 上传文件
* @param ftpClient
* @throws IOException
*/
public void upload(FTPClient ftpClient) throws IOException{
InputStream inputStream = null;
try {
String path="C:/Users/Administrator/Desktop/44/中文.txt";
File file = new File(path);
inputStream = new FileInputStream(file);
String fileName = file.getName();
boolean flag = ftpClient.storeFile(new String(fileName.getBytes("GBK"), "iso-8859-1") , inputStream);
ftpClient.logout();
} catch (IOException e) {
logger.error("上传失败",e);
}
}
/**
* 下载文件
* @param ftpClient
* @param filename 下载的文件名
* @throws IOException
*/
public void download(FTPClient ftpClient,String filename) throws IOException{
FTPFile[] ftpFiles = ftpClient.listFiles();
for (FTPFile file : ftpFiles) {
if (filename.equalsIgnoreCase(file.getName())) {
File localFile = new File("C:/Users/Administrator/Desktop" + "/" + file.getName());
OutputStream os = new FileOutputStream(localFile);
ftpClient.retrieveFile(file.getName(), os);
os.close();
}
}
ftpClient.logout();
}
/**
*
* @param ftpClient
* @param pathname 文件路径名
* @throws IOException
*/
public void deleteFile(FTPClient ftpClient,String pathname) throws IOException{
ftpClient.dele(pathname);
ftpClient.logout();
}
public static FTPClient init(){
FTPClient ftpClient = new FTPClient();
try {
// 连接FTP服务器
ftpClient.connect(HOSTNAME, PORT);
//获取服务器返回码
int reply = ftpClient.getReplyCode();
//验证服务器是否连接成功
if (!FTPReply.isPositiveCompletion(reply)) {
ftpClient.disconnect();
logger.error("FTPServer 拒绝连接");
return null;
}
// 登录FTP服务器
boolean result =ftpClient.login(USERNAME, PASSWORD);
//验收是否登录成功
if (!result) {
logger.error("ftpClient登陆失败!");
throw new Exception("ftpClient登陆失败! userName:"+ USERNAME + " ; password:"
+ PASSWORD);
}
//设置传输的编码格式
ftpClient.setControlEncoding("UTF-8");
//设置文件类型(这个采用二进制格式)
ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
//设置为主动模式(pass)
ftpClient.enterLocalPassiveMode();
//创建目录
ftpClient.makeDirectory(PATHNAME);
//切换到新建的目录
ftpClient.changeWorkingDirectory(PATHNAME);
}catch (Exception e) {
logger.equals(e);
}
return ftpClient;
}
/**
* 删除文件夹与文件夹下面的所有子文件和文件夹
* @param ftpClient
* @param ftpPath
* @return
* @throws IOException
*/
private static boolean DeleteDir(FTPClient ftpClient, String ftpPath)
throws IOException {
FTPFile[] files = ftpClient.listFiles(ftpPath);
boolean flag = false;
for (FTPFile f : files) {
String path = ftpPath + File.separator + f.getName();
if (f.isFile()) {
// 是文件就删除文件
ftpClient.deleteFile(path);
} else if (f.isDirectory()) {
if(f.getName()!=null&&!".".equals(f.getName())&&!"..".equals(f.getName())){
DeleteDir(ftpClient, path);
}
}
}
// 每次删除文件夹以后就去查看该文件夹下面是否还有文件,没有就删除该空文件夹
FTPFile[] files2 = ftpClient.listFiles(ftpPath);
if (files2.length == 2) {
flag = ftpClient.removeDirectory(ftpPath);
} else {
flag = false;
}
return flag;
}
}