import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.SocketException;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
import static org.junit.Assert.*;
import org.junit.Test;
public class FtpUtilTest {
@Test
public void getFileInfo() throws SocketException, IOException {
FTPClient ftpClient = new FTPClient();
ftpClient.connect("x.x.x.x", 21);
boolean isFtpServer = FTPReply.isPositiveCompletion(ftpClient.getReplyCode());
assertEquals(true, isFtpServer);
boolean loginSuccess = ftpClient.login("admin-dbk", "xxxx"); // 切换FTP工作目录
assertEquals(true, loginSuccess);
ftpClient.setControlEncoding("UTF-8"); // 设置组件工作字符集为UTF-8
ftpClient.changeWorkingDirectory("/wt/xxxx");
FTPFile[] files = ftpClient.listFiles();
for (FTPFile file : files) {
System.out.println("fileName: " + file.getName()); // 文件名
System.out.println("size: " + formatSize(file.getSize())); // 文件大小(单位:B)
System.out.println();
}
ftpClient.disconnect();
}
@Test
public void downFile() throws SocketException, IOException {
FTPClient ftpClient = new FTPClient();
ftpClient.connect("x.x.x.x", 21);
boolean isFtpServer = FTPReply.isPositiveCompletion(ftpClient.getReplyCode());
assertEquals(true, isFtpServer);
boolean loginSuccess = ftpClient.login("admin-dbk", "xxxx");
assertEquals(true, loginSuccess);
ftpClient.changeWorkingDirectory("/wt/xxxx"); // 切换FTP工作目录
FTPFile[] files = ftpClient.listFiles();
File localFile = null;
for (FTPFile file : files) {
// 本地文件名使用UTF-8格式
localFile = new File("E:/FTP下载/" + new String(file.getName().getBytes("ISO-8859-1"), "UTF-8"));
OutputStream os = new FileOutputStream(localFile);
ftpClient.retrieveFile(file.getName(), os); // 下载时服务器文件名使用默认编码
os.close();
System.out.println(localFile.getName() + " \t下载成功!");
}
boolean logoutSuccess = ftpClient.logout();
assertEquals(true, logoutSuccess);
ftpClient.disconnect();
}
public String formatSize(long size) {
if (size < (1024 * 1024)) {
return String.format("%dK", size / 1024);
} else if (size < (1024 * 1024 * 1024)) {
return String.format("%.1fM", size / 1024.0 / 1024.0);
} else {
return String.format("%.2fG", size / 1024.0 / 1024.0 / 1024.0);
}
}
}
以下为测试效果:
fileName: 0031制单变更评审表C版-B3198Z.doc
size: 30K
fileName: PO#1B2917-GKS-1381-银色玻璃丝印.pdf
size: 223K
fileName: PO#1B2937G-GBF-1408-保修卡-更新排版9-8.pdf
size: 16.6M
fileName: PO#1B2937H-GBF-1408-小册子.pdf
size: 869K
fileName: PO#1B3198V-GKS-1381-彩盒.pdf
size: 312K
fileName: PO#1B3198Z-GKS-1381-彩盒贴纸.pdf
size: 793K
fileName: PO#1B4140-GKS-1381-说明书.pdf
size: 2.5M
fileName: PO#1B4140C-GKS-1381-插页.pdf
size: 250K
fileName: po#1B3198Z-GKS-1381-carton-sticker.pdf
size: 227K
fileName: po#1B3198Z-GKS-1381-背贴.pdf
size: 1.7M
fileName: 计划调整联络单-0103.xls
size: 29K
fileName: 订单制作表PO#1B3198Z.xls
size: 1.2M
0031制单变更评审表C版-B3198Z.doc 下载成功!
PO#1B2917-GKS-1381-银色玻璃丝印.pdf 下载成功!
PO#1B2937G-GBF-1408-保修卡-更新排版9-8.pdf 下载成功!
PO#1B2937H-GBF-1408-小册子.pdf 下载成功!
PO#1B3198V-GKS-1381-彩盒.pdf 下载成功!
PO#1B3198Z-GKS-1381-彩盒贴纸.pdf 下载成功!
PO#1B4140-GKS-1381-说明书.pdf 下载成功!
PO#1B4140C-GKS-1381-插页.pdf 下载成功!
po#1B3198Z-GKS-1381-carton-sticker.pdf 下载成功!
po#1B3198Z-GKS-1381-背贴.pdf 下载成功!
计划调整联络单-0103.xls 下载成功!
订单制作表PO#1B3198Z.xls 下载成功!