1.pom.xml添加连接FTP依赖包
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>3.1</version>
</dependency>
2.测试读取文件
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.SocketException;
import java.text.SimpleDateFormat;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
public class Test {
public static void main(String[] args) throws Exception {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
FTPClient ftpClient = FtpUtil.connectFTP("127.0.0.1", 21, "123456", "123456");
FTPFile[] ftpFiles = ftpClient.listFiles();
for (FTPFile ftpFile : ftpFiles) {
String fileName = ftpFile.getName();//获取文件名
String suffix = fileName.substring(fileName.lastIndexOf(".")).toLowerCase();//后缀名
//ftp设置的是utc时间,和系统时间有8小时时差,所以需要加上时差
Long lastModifiedTime = ftpFile.getTimestamp().getTimeInMillis() + ftpFile.getTimestamp().getTimeZone().getOffset(0);
System.out.println("读取到文件:"+fileName+" 文件最后修改时间:"+sdf.format(lastModifiedTime));
if(suffix.equals(".txt")){
InputStream is = ftpClient.retrieveFileStream(ftpFile.getName());
BufferedReader br = new BufferedReader(new InputStreamReader(is,"UTF-8"));
String content = "";
while ((content = br.readLine()) != null){ //一次读入一行数据
System.out.println(content);
}
br.close();
is.close();
//结束事务(有流返回时需手动调用,否则会报输入流为空)
ftpClient.completePendingCommand();
}
}
}
/**
* 连接FTP
* @param hostname 服务器地址
* @param port 端口号(默认为21)
* @param username 帐号
* @param password 密码
*/
public static FTPClient connectFTP(String hostname, int port, String username, String password){
FTPClient ftp = new FTPClient();
try {
//连接FTP服务器
ftp.connect(hostname, port);
boolean login = ftp.login(username, password);
if (login) {
System.out.println(">>>>>>>>FTP-->登录成功>>>>>>>>>>>>>");
}else {
System.out.println(">>>>>>>>FTP-->登录失败>>>>>>>>>>>>>");
}
} catch (SocketException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return ftp;
}
}