FTPClient (org.apache.commons.net.ftp.FTPClient)
首先我们需要导包
<dependency>
<groupId>commons-net</groupId>
<artifactId>commons-net</artifactId>
<version>3.6</version>
</dependency>
下载文件的工具类
/**
* ftp 下载文件
*
* @param url 服务ip
* @param port 端口号
* @param username 用户名
* @param password 密码
* @param remotePath 服务器相对路径
* @param fileName 文件名称
* @return byte
* @throws Exception
*/
public static byte[] downFile(String url, int port, String username, String password, String remotePath, String fileName) throws Exception {
// 用于接口文件流
ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
// 创建盒子
FTPClient ftp = new FTPClient();
try {
int reply;
// 打开盒子大门
ftp.connect(url, port);
// 登录
ftp.login(username, password);
// 获取连接返回值
reply = ftp.getReplyCode();
// 返回 500 ,530 都是失败
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
return byteStream.toByteArray();
}
// 设置字符集
ftp.setControlEncoding("UTF-8");
ftp.setFileType(FTPClient.BINARY_FILE_TYPE);
ftp.enterLocalPassiveMode();
// 转移到FTP服务器目录
ftp.changeWorkingDirectory(remotePath);
// 获取path下的所有文件
String[] fs = ftp.listNames();
for (String ff : fs) {
String ftpName = ff;
if (ftpName.equals(fileName)) {
try (InputStream is = ftp.retrieveFileStream(new String(ftpName.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1))) {
byte[] buffer = new byte[BUFFER_SIZE];
int len = -1;
while ((len = is.read(buffer, 0, BUFFER_SIZE)) != -1) {
byteStream.write(buffer, 0, len);
}
} catch (Exception e) {
e.printStackTrace();
}
break;
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ftp.isConnected()) {
ftp.disconnect();
}
}
return byteStream.toByteArray();
}