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

[经验分享] 强烈推荐一个纯java的FTP Client库:ftp4j

[复制链接]

尚未签到

发表于 2016-6-10 07:53:57 | 显示全部楼层 |阅读模式
  ftp4j是个很年轻的开源项目,但是试用后发现很好很强大,如果你找一个纯java的FTP库,要支持socks4,socks4a,socks5,http代理,就是他了!
比apache的FTPClient(不支持代理)、半商业的edtFTPj(PRO支持代理,但是要$,而且是系统变量级的代理,不能单个指定)等好用多了,而且是LGPL协议,源码质量很高。(不过如果你需要FTPS及SFTP,那ftp4j不支持)
jar包只有50多k,地址在这里:ftp4j
使用代理的代码:

  • import java.util.ArrayList;
  • importit.sauronsoftware.ftp4j.FTPClient;
  • importit.sauronsoftware.ftp4j.FTPFile;
  • importit.sauronsoftware.ftp4j.connectors.SOCKS4Connector;
  • ......
  • //ftp4j使用socks4代理连接FTP示例,by http://bianbian.org
  • FTPClientftp = new FTPClient();
  • SOCKS4Connectorsocks4 = new SOCKS4Connector("127.0.0.1", 1080);
  • ftp.setConnector(socks4);
  • ftp.connect("an.ip.or.host", 21);
  • ftp.login("anonymous", "bianbian@bianbian.org");
  • ftp.setCharset("gbk");
  • //list files
  • FTPFile[]list = ftp.list();
  • for(FTPFilefile : list) {
  •   System.out.println(file);
  • }
  • ftp.disconnect(true);

  在解析部分FTP站点的目录list的时候遇到了FTPListParseException(也怪FTP协议没有对LIST格式作出标准)。查看源码发现,主要是两个问题:
1)文件权限不只rwx这三个,附加了s、t(详见http://en.wikipedia.org/wiki/File_system_permissions
2)部分ftpd似乎直接调用的“ls -l”输出目录,第一行是“total xxx”
给作者写信了,说不定下个版本就有Sepcial Thanks to bianbian 了。嘿嘿嘿嘿。。。
修正后的代码(省略后面没有变化的部分):


  • public class UnixListParser implements FTPListParser {
  •   // bianbian.org: Pattern有问题,修正
  •   privatestatic final Pattern PATTERN = Pattern
  •       .compile("^([dlcbsp//-])[r//-][w//-][xsS//-][r//-][w//-][xsS//-][r//-][w//-][xtT//-]//s+"
  •           + "(?://d+//s+)?//S+//s*//S+//s+(//d+)//s+(?:(//w{3})//s+(//d{1,2}))//s+"
  •           + "(?:(//d{4})|(?:(//d{1,2}):(//d{1,2})))//s+"
  •           + "([^/////*?/"<>|]+)(?: -> ([^////*?/"<>|]+))?$");
  •   privatestatic final DateFormat DATE_FORMAT = new SimpleDateFormat(
  •       "MMM dd yyyy HH:mm", Locale.US);
  •   publicFTPFile[] parse(String[] lines) throws FTPListParseException {
  •     intcurrentYear = new GregorianCalendar().get(Calendar.YEAR);
  •     inti, jump = 0, size = lines.length;
  •     //bianbian.org: glftpd 的第一行和 ls -l 一样,会丢个"total N"过来,先去掉
  •     if(size > 0 && lines[0].startsWith("total")) {
  •       size--;
  •       jump = 1;
  •     }
  •     FTPFile[]ret = new FTPFile[size];
  •     for(i = 0; i < size; i++) {
  •       Matcherm = PATTERN.matcher(lines[i + jump]);
  •       if(m.matches()) {
  •         ret[i] = newFTPFile();
  •         // Retrieve the data.
  •         chartypeChar = m.group(1).charAt(0);
  •         StringsizeString = m.group(2);
  •         StringmonthString = m.group(3);
  •         StringdayString = m.group(4);
  •         StringyearString = m.group(5);
  •         StringhourString = m.group(6);
  •         StringminuteString = m.group(7);
  •         StringnameString = m.group(8);
  •         StringlinkedString = m.group(9);
  •         // Parse the data.
  •         if("-cbsp".indexOf(typeChar) > -1) {
  •           ret[i].setType(FTPFile.TYPE_FILE);
  •         }else if (typeChar == 'd') {
  •           ret[i].setType(FTPFile.TYPE_DIRECTORY);
  •         }else if (typeChar == 'l') {
  •           ret[i].setType(FTPFile.TYPE_LINK);
  •           ret[i].setLink(linkedString);
  •         }else {
  •           thrownew FTPListParseException();
  •         }
  •   ...

运维网声明 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-228419-1-1.html 上篇帖子: JAVA方式实现ftp大文件呢上传 下篇帖子: 加密ssl vsftp、ftp隐式加密&显式加密
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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