快速业务通道

linux下使用commons-net ftp的总结

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-03-24

commons-net3.0是apache公司的开源jar包, 我使用它来对一台linux中文操作系统电脑进行ftp连接, 几经修改后, 总结如下:

1. 操作系统的配置

在ftpClient.login(..)成功后, 调用

ftpClient.configure(new FTPClientConfig(ftpClient.getSystemType()));

2.中文乱码问题的解决

ftpClient = new FTPClient();

ftpClient.setControlEncoding("GBK");

3.FTPClient.listFiles()或者FTPClient.retrieveFile()方法时,就停止在那里,什么反应都没有,出现假死状态的解决

在执行FTPClient.listFiles()或者FTPClient.retrieveFile()方法前调用ftpClient.enterLocalPassiveMode();

这个方法的意思就是每次数据连接之前,ftp client告诉ftp server开通一个端口来传输数据.为什么要这样做呢,ftp server可能每次开启不同的端口来传输数据,但是在linux上,安全限制,可能某些端口没有开启,就出现阻塞.原文链接http://lgclf.blog.163.com/blog/static/384452222011913114428161/

4.listFiles()返回为空的解决

一般是ftp服务器(主要是小型机)的操作系统不同语言环境的时间格式造成的,在中文环境下,文件或文件夹的时间格式为"m月d日 hh:mm"或"yyyy年m月 d",而E文环境下时间格式为"MMM d yyyy"或"MMM d HH:mm",于是,在中文环境下,ftp包中的FTPTimestampParserImpl类将时间字符串Date化时抛异常,commons-net包不支持中文.
解决办法(两种办法):
1. 将ftp服务器操作系统语言环境设为英文;
2. 修改ftp包的代码:将FTPTimestampParserImpl类进行扩展,使之支持中文
下面针对第2种解决办法来实现:
(1) 新建类FTPTimestampParserImplExZH类:
/**
* FTPTimestampParserImpl的扩展类,使之支持中文环境的时间格式
* Date:2007-8-15
*/
package org.apache.commons.net.ftp.parser;

import java.text.ParseException;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
* @author hzwei206
* FTPTimestampParserImpl的扩展类,使之支持中文环境的时间格式
*/
public class FTPTimestampParserImplExZH extends FTPTimestampParserImpl
{
private SimpleDateFormat defaultDateFormat = new SimpleDateFormat("mm d hh:mm");
private SimpleDateFormat recentDateFormat = new SimpleDateFormat("yyyy mm d");

/**
* @author hzwei206
* 将中文环境的时间格式进行转换
*/
private String formatDate_Zh2En(String timeStrZh)
{
if (timeStrZh == null)
{
return "";
}

int len = timeStrZh.length();
StringBuffer sb = new StringBuffer(len);
char ch = '' '';
for (int i = 0;i < len;i )
{
ch = timeStrZh.charAt(i);
if ((ch >= ''0'' && ch <= ''9'') || ch == '' '' || ch == '':'')
{
sb.append(ch);
}
}

return sb.toString();
}

/**
* Implements the one {@link FTPTimestampParser#parseTimestamp(String) method}
* in the {@link FTPTimestampParser FTPTimestampParser} interface
* according to this algorithm:
*

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号