这里只提供Java从FTP下载文件(获取文件流)的示例。
/**
* 文件工具类
*
*/
public final class FileUtil
{
/**
* 加载properties配置文件
*
* @param filePath properties配置文件
* @return 返回Properties对象
*/
public static Properties loadProperties(String filePath)
{
Properties properties = new Properties();
try
{
properties.load(new FileInputStream(new File(filePath)));
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch (IOException e)
{
e.printStackTrace();
}
return properties;
}
}
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import org.apache.commons.io.IOUtils;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPReply;
import org.apache.log4j.Logger;
/**
* FTP操作器
*/
public class FTPHandler
{
/**
* 日志实例
*/
private static final Logger logger = Logger.getLogger(FTPHandler.class);
/**
* classes文件夹根目录全路径
*/
private static final String CLASS_PATH = FTPHandler.class.getResource("/").getPath().substring(1);
/**
* config目录名称
*/
private static final String CONFIG_DIR = "config";
/**
* ftp连接配置
*/
private Properties ftpConfig;
/**
* FTPHandler 单粒对象
*/
public static FTPHandler instance;
/**
* 构造方法私有化
*/
private FTPHandler()
{
this.init();
}
/**
*
*/
private void init()
{
//ftp配置文件路径
String ftpConfigPath = CLASS_PATH.substring(0, CLASS_PATH.length() - 8) + FTPHandler.CONFIG_DIR + "/" + "ftpserver.properties";
ftpConfig = FileUtil.loadProperties(ftpConfigPath);
}
/**
* 获取FTPHandler单粒对象
*
* @return
*/
public static synchronized FTPHandler getInstance()
{
if (null == instance)
{
instance = new FTPHandler();
}
return instance;
}
/**
* 根据区域标记。不同的区域使用不同的账号登陆FTP
*
* @param areaFlag 区域标记
* @param filePath 文件路径
* @return
*/
public InputStream getInputStream(String areaFlag, String filePath)
{
FTPClient ftp = this.ftpFactory(areaFlag);
InputStream in = null;
try
{
in = ftp.retrieveFileStream(filePath);
}
catch (IOException e)
{
logger.error("获取文件流失败,文件路径:" + filePath, e);
}
this.closeFtp(ftp);
return in;
}
/**
* ftpClient对象工厂方法
*
* @param areaFlag 区域标记 目前不同的区域使用不同的FTP登陆账号
* @return
*/
private FTPClient ftpFactory(String areaFlag)
{
FTPClient ftp = new FTPClient();
if (null != ftpConfig.getProperty("ftp.controlkeepalivetimeout"))
{
ftp.setControlKeepAliveTimeout(Long.valueOf(ftpConfig.getProperty("ftp.controlkeepalivetimeout")));
}
try
{
//ftp服务器地址
ftp.connect(ftpConfig.getProperty("ftp.server"));
int reply = ftp.getReplyCode();
//检查连接是否正常
if (!FTPReply.isPositiveCompletion(reply))
{
ftp.disconnect();
logger.error("FTP服务器拒绝连接!");
}
//登陆
if (!ftp.login(getAccountInfoByFlag(areaFlag, "username"), this.getAccountInfoByFlag(areaFlag, "password")))
{
ftp.logout();
}
else
{
//二进制传输
ftp.setFileType(FTP.BINARY_FILE_TYPE);
}
}
catch (Exception e)
{
logger.error("创建ftpClient对象失败!", e);
}
return ftp;
}
private void closeFtp(FTPClient ftp)
{
try
{
ftp.noop();
ftp.logout();
}
catch (IOException e)
{
logger.error("ftpClient登出失败!", e);
}
finally
{
if (ftp.isConnected())
{
try
{
ftp.disconnect();
}
catch (IOException f)
{
logger.error("ftp连接关闭失败!", f);
}
}
}
}
/**
* 获取账号信息
*
* @param areaFlag 区域缩写
* @param suffix properties后缀
* @return 返回账号信息
*/
private String getAccountInfoByFlag(String areaFlag, String suffix)
{
//默认情况key值
String key = "ftp." + suffix;
if (null != areaFlag && !"".equals(areaFlag))
{
key = "ftp." + areaFlag + "_" + suffix;
}
return ftpConfig.getProperty(key);
}
// public static void main(String[] args)
// {
// FTPHandler tmp = FTPHandler.getInstance();
//
// try
// {
// System.out.println(IOUtils.toString(tmp.getInputStream("11", "jQuery_Backup.txt")));
// }
// catch (IOException e)
// {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// }
}
配置文件
################################################
#Connection Configuration
ftp.server=IP地址
ftp.controlkeepalivetimeout=300
#Account Configuration
ftp.11_username=123
ftp.11_password=123
ftp.33_username=456
ftp.33_password=456