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 下载成功!