从FTP服务器上下载文件(支持中文文件名)

 

 

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

猜你喜欢

转载自shuitao-cao.iteye.com/blog/2288751