设为首页 收藏本站
查看: 954|回复: 0

[经验分享] Java访问FTP

[复制链接]

尚未签到

发表于 2016-6-7 10:50:18 | 显示全部楼层 |阅读模式
  
  这里只提供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
  
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-227349-1-1.html 上篇帖子: FTP通用处理 下篇帖子: java ftp下载
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表