java ftp工具类_FTPUtils工具类

import java.io.File;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.OutputStream;

import java.net.SocketException;

import java.util.ArrayList;

import java.util.List;

import org.apache.commons.logging.Log;

import org.apache.commons.logging.LogFactory;

import org.apache.commons.net.ftp.FTPClient;

import org.apache.commons.net.ftp.FTPFile;

import org.apache.commons.net.ftp.FTPReply;

/**

* ftp工具类

*

* @author A雄

*

*/

public class FtpUtil {

private final static Log logger = LogFactory.getLog(FtpUtil.class);

/**

* 获取FTPClient对象

*

* @param ftpHost FTP主机服务器

* @param ftpPassword FTP 登录密码

* @param ftpUserName FTP登录用户名

* @param ftpPort FTP端口 默认为21

* @return

*/

private static FTPClient getFTPClient(String ftpHost, String ftpUserName, String ftpPassword, int ftpPort) {

FTPClient ftpClient = new FTPClient();

try {

ftpClient = new FTPClient();

// 连接FTP服务器

ftpClient.connect(ftpHost, ftpPort);

// 登陆FTP服务器

ftpClient.login(ftpUserName, ftpPassword);

if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {

logger.info("未连接到FTP,用户名或密码错误。");

ftpClient.disconnect();

} else {

logger.info("FTP连接成功。");

}

} catch (SocketException e) {

logger.info("FTP的IP地址可能错误,请正确配置。" + e);

} catch (IOException e) {

logger.info("FTP的端口错误,请正确配置。" + e);

}

return ftpClient;

}

/***

* 从FTP服务器下载文件

*

* @param ftpHost FTP IP地址

* @param ftpUserName FTP 用户名

* @param ftpPassword FTP用户名密码

* @param ftpPort FTP端口

* @param ftpPath FTP服务器中文件所在路径 格式: ftptest/aa

* @param localPath 下载到本地的位置 格式:H:/download

* @param fileName 文件名称

*/

public static File downloadFtpFile(String ftpHost, String ftpUserName, String ftpPassword, int ftpPort,

String ftpPath, String localPath, String fileName) {

FTPClient ftpClient = null;

try {

ftpClient = getFTPClient(ftpHost, ftpUserName, ftpPassword, ftpPort);

// 中文支持

ftpClient.setControlEncoding("UTF-8");

//ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);

ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);

ftpClient.enterLocalPassiveMode();

ftpClient.changeWorkingDirectory(ftpPath);

File localFile = new File(localPath , fileName);

if (!localFile.getParentFile().exists()) {

localFile.getParentFile().mkdirs();

}

OutputStream os = new FileOutputStream(localFile);

ftpClient.retrieveFile(fileName, os);

os.close();

ftpClient.logout();

return localFile;

} catch (FileNotFoundException e) {

logger.error("没有找到" + ftpPath + "文件," + e);

} catch (SocketException e) {

logger.error("连接FTP失败, " + e);

} catch (IOException e) {

logger.error("文件读取错误。" + e);

}

return null;

}

/***

* 从FTP服务器下载文件

*

* @param ftpHost FTP IP地址

* @param ftpUserName FTP 用户名

* @param ftpPassword FTP用户名密码

* @param ftpPort FTP端口

* @param ftpPath FTP服务器中文件所在路径 格式: ftptest/aa

* @param localPath 下载到本地的位置 格式:H:/download

*/

public static List downloadFtpFile(String ftpHost, String ftpUserName, String ftpPassword, int ftpPort,

String ftpPath, String localPath) {

FTPClient ftpClient = null;

//InputStream is = null;

FileOutputStream fos = null;

OutputStream is=null;

//String[] returnFile =null;

List list = new ArrayList();

try {

ftpClient = getFTPClient(ftpHost, ftpUserName, ftpPassword, ftpPort);

// 中文支持

ftpClient.setControlEncoding("UTF-8");

ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);

ftpClient.enterLocalPassiveMode();

//ftpClient.changeWorkingDirectory("/we_ali_pay_file/20180606");

ftpClient.changeWorkingDirectory(ftpPath);

ftpClient.enterLocalPassiveMode();

FTPFile[] fs = ftpClient.listFiles();

//System.out.println(fs.length);

for (FTPFile ff : fs) {

//解决中文乱码问题,两次解码

//byte[] bytes=ff.getName().getBytes("iso-8859-1");

//String fn=new String(bytes,"utf8");

File localFile = new File(localPath +"\\"+ ff.getName());

localFile.toString();

list.add(localFile.toString());

//System.out.println("文件创建路径为:"+localFile);

if (!localFile.getParentFile().exists()) {

localFile.getParentFile().mkdirs();

}

is = new FileOutputStream(localFile);

ftpClient.retrieveFile(ff.getName(), is);

}

ftpClient.logout();

} catch (Exception e) {

logger.error("FTP文件下载失败!", e);

} finally {

try {

if (fos != null) {

fos.close();

}

if (is != null) {

is.close();

}

} catch (IOException e) {

e.printStackTrace();

}

}

return list;

}

public static void main(String[] args) {

// getFTPClient("192.168.*.*", "**", "**", 21);

downloadFtpFile("192.168.*.*", "**", "*", 21, "ftp://192.168.*.*", "D:/LYGSEFTPDownload", "BAS20181201MX000110751010007");

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值