这里只提供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