package com.company.project.utils;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
import java.io.IOException;
import java.util.ArrayList;
/**
* 列出FTP服务器上指定目录下面的所有文件
*/
public class FTPListAllFiles {
public FTPClient ftp;
public ArrayList<String> arFiles;
private static final String FAR_SERVER_URL = "10.*.*.4";
private static final int SERVER_PORT = 21;
private static final String SERVER_USER = "ftpuser";
private static final String SERVER_PWD = "123456";
private static final String path = "/data/ftp/";
private static final String downloadPath = "";
/**
* 登陆FTP服务器
*
* @param host FTPServer IP地址
* @param port FTPServer 端口
* @param username FTPServer 登陆用户名
* @param password FTPServer 登陆密码
* @return 是否登录成功
* @throws IOException
*/
public boolean login(String host, int port, String username, String password) throws IOException {
ftp = new FTPClient();
//设置超时
ftp.setConnectTimeout(60 * 60 * 1000);
//设置编码
ftp.setControlEncoding("UTF-8");
this.ftp.connect(host, port);
if (FTPReply.isPositiveCompletion(this.ftp.getReplyCode())) {
if (this.ftp.login(username, password)) {
this.ftp.setControlEncoding("GBK");
return true;
}
}
if (this.ftp.isConnected()) {
this.ftp.disconnect();
}
return false;
}
/**
* 关闭数据链接
*
* @throws IOException
*/
public void disConnection() throws IOException {
if (this.ftp.isConnected()) {
this.ftp.disconnect();
}
}
/**
* 递归遍历出目录下面所有文件
*
* @param pathName 需要遍历的目录,必须以"/"开始和结束
* @throws IOException
*/
public String List(String pathName) throws IOException {
StringBuffer filename = new StringBuffer();
if (pathName.startsWith("/") && pathName.endsWith("/")) {
String directory = pathName;
//更换目录到当前目录
this.ftp.changeWorkingDirectory(directory);
ftp.enterLocalPassiveMode(); //开启被动模式,跟端口是否开放有关,更多详情请百度
FTPFile[] files = this.ftp.listFiles();
if (files != null) {
for (int i = 0; i < files.length; i++) {
if (files[i].isFile()) {
String n = new String(files[i].getName().getBytes("gbk"), "utf-8");
if (i == files.length - 1) {
filename.append(n );
} else {
filename.append(n + ",");
}
}
}
}
}
return filename.toString();
}
//获取指定文件夹内的文件名称
public static String getFilenames() {
String names = "";
FTPListAllFiles f = new FTPListAllFiles();
try {
if (f.login(FAR_SERVER_URL, SERVER_PORT, SERVER_USER, SERVER_PWD)) {
names = f.List(path);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
f.disConnection();
} catch (IOException e) {
e.printStackTrace();
}
}
return names;
}
//测试
public static void main(String[] args) throws IOException {
System.out.println(getFilenames());
}
}
加了个注释:
ftp.enterLocalPassiveMode(); //开启被动模式,跟端口是否开放有关,更多详情请百度