commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案

目前开发的这个项目中需要从远程服务器上下载数据,采用了开源的commons.net.ftp包。在实际应用中发现了一个问题,在测试服务器上调用ftpClient.listFiles()方法可以返回包含文件名的数组,而在现网服务器上此方法返回NULL。我被这个问题困扰了好久,下面把我的处理思路陈述如下:

(1)首先发现2个服务器的区别:测试服务器为solaris服务器,而现网服务器为hp服务器,会不会是平台差异所致呢?带着这个问题,下载了common包的源码,通过源码进行调试。

(2)FTPListParseEngine负责处理通过socket来获取远程服务器的信息。大概执行了ls –l

操作,并把结果一行行放入一个linkedlist中。代码如下:

1commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮private void readStream(InputStream stream, String encoding) throws IOException

2commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮{

3commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 BufferedReader reader;

4commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 if (encoding == null)

5commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮{

6commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 reader = new BufferedReader(new InputStreamReader(stream));

7commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 }

8commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 else

9commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮{

10commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 reader = new BufferedReader(new InputStreamReader(stream, encoding));

11commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 }

12commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮

13commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 String line = this.parser.readNextEntry(reader);

14commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮

15commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 while (line != null)

16commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮{

17commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 this.entries.add(line);

18commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 line = this.parser.readNextEntry(reader);

19commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 }

20commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 reader.close();

21commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 }

22commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮

 

(3)这个时候发现问题了,传入line中的字符串中有乱码!正常的应该为:

 

drwxr-xr-x 11 daladmin daladmin 1024 2004年9月18日 mqm

 

其中时间那部分为乱码。

(4)处理:在调用listFiles()之前先调用ftpClient.setControlEncoding("GBK");这样line就能正常显示了,但是listFiles() 返回依然为空!!! 继续.....

(5) 发现继续运行的时候有一个正则表达式匹配不成功,代码如下:

1commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 public boolean matches(String s)

2commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮{

3commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 this.result = null;

4commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 if (_matcher_.matches(s.trim(), this.pattern))

5commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮{

6commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 this.result = _matcher_.getMatch();

7commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 }

8commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 return null != this.result;

9commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 }

10commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮

 

s即为(3)中的line,追踪正则表达式,是在具体的子类UnixFTPEntryParser中写死的。如下:

1commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮private static final String REGEX =

2commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 "([bcdlfmpSs-])"

3commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 +"(((r|-)(w|-)([xsStTL-]))((r|-)(w|-)([xsStTL-]))((r|-)(w|-)([xsStTL-])))//+?//s+"

4commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 + "(//d+)//s+"

5commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 + "(//S+)//s+"

6commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 + "(?:(//S+)//s+)?"

7commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 + "(//d+)//s+"

8commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮

9commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 /**//*

10commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 numeric or standard format date

11commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 */

12commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 //问题出在此处,这个匹配只匹配2中形式:

13commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 //(1)2008-08-03

14commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 //(2)Jan 9或4月 26

15commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 //而出错的hp机器下的显示为 8月20日(没有空格分开)

16commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 //故无法匹配而报错

17commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 //将下面字符串改为:

18commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 //((?://d+[-/]//d+[-/]//d+)|(?://S+//s+//S+)|(?://S+))//s+

19commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 //便可以成功匹配

20commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 + "((?://d+[-/]//d+[-/]//d+)|(?://S+//s+//S+))//s+"

21commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮

22commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 /**//*

23commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 year (for non-recent standard format)

24commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 or time (for numeric or recent standard format

25commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 */

26commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 + "(//d+(?:://d+)?)//s+"

27commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮

28commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 + "(//S*)(//s*.*)";

29commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮

 

(6)做上面修改后,能够解析出来,但是接着又会报异常,错误发生在UnixFTPEntryParser类的parseFTPEntry方法中,common.net对中文支持的实在是不够:

1commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 try

2commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮{

3commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 file.setTimestamp(super.parseTimestamp(datestr));

4commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 }

5commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 catch (ParseException e)

6commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮{

7commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 //注释掉commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮

8commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 return null; // this is a parsing failure too.

9commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 }

10commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮

 

这个错误的原因是创建simpleDateFormat类时(详情请见jdkAPI文档)

commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮public SimpleDateFormat(String pattern, Locale locale)

 

locale为EN,解决方案是创建一个新类,继承ConfigurableFTPFileEntryParserImpl。其中的属性defaultDateFormat和recentDateFormat 用Locale.CHINA初始化。而我目前的程序用不到取文件的修改时间,所以直接省事将上段代码中的异常吞掉,即注释掉return null 。网上有个解决方案(http://hi.baidu.com/hzwei206/blog/item/7c901d2debf7e136359bf7cd.html),是用了另一种方案,粘贴如下:

 

 

 

 

commons-net-1.4.1.jar包中ftp应用的几点问题

一、异常:

http://commons.apache.com网站下载了commons-net-1.4.1包后添加到自己的工程中,调用FtpClient类的listFiles(String pathName)方法时,抛如下异常:

Exception in thread "main" java.lang.NoClassDefFoundError :

org/apache/oro/text/regex/MalformedPatternException

at org.apache.commons.net.ftp.parser.RegexFTPFileEntryParserImpl.<init> (RegexFTPFileEntryParserImpl.java:75)

at org.apache.commons.net.ftp.parser.ConfigurableFTPFileEntryParserImpl.<init>(ConfigurableFTPFileEntryParserImpl.java:57)

at org.apache.commons.net.ftp.parser.UnixFTPEntryParser.<init>(UnixFTPEntryParser.java:136)

at org.apache.commons.net.ftp.parser.UnixFTPEntryParser.<init>(UnixFTPEntryParser.java:119)

at org.apache.commons.net.ftp.parser.DefaultFTPFileEntryParserFactory.createUnixFTPEntryParser(DefaultFTPFileEntryParserFactory.java:169)

at org.apache.commons.net.ftp.parser.DefaultFTPFileEntryParserFactory.createFileEntryParser(DefaultFTPFileEntryParserFactory.java:94)

at org.apache.commons.net.ftp.FTPClient.initiateListParsing(FTPClient.java:2358)

at org.apache.commons.net.ftp.FTPClient.listFiles(FTPClient.java:2141)

at org.apache.commons.net.ftp.FTPClient.listFiles(FTPClient.java:2188)

.................

以上异常是由于缺少辅助的包jakarta-oro-2.0.8.jar引起的,去http://commons.apache.com网站下载该包后放入工程的lib下,并加载到classpath中,重新编译运行,OK!

二、调用FtpClient类的listFiles(String pathName)方法失效的问题:

一般是由于ftp服务器(主要是小型机)的操作系统不同语言环境的时间格式造成的,在中文环境下,文件或文件夹的时间格式为"m月d日 hh:mm"或"yyyy年m月 d",而E文环境下时间格式为"MMM d yyyy"或"MMM d HH:mm",于是,在中文环境下,ftp包中的FTPTimestampParserImpl类将时间字符串Date化时抛异常,因为commons-net-1.4.1包不支持中文。

解决办法(两种办法):

1. 将ftp服务器操作系统语言环境设为英文;

2. 修改ftp包的代码:将FTPTimestampParserImpl类进行扩展,使之支持中文

下面针对第2种解决办法来实现:

(1) 新建类FTPTimestampParserImplExZH类:

1commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮/** *//**

2commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮* FTPTimestampParserImpl的扩展类,使之支持中文环境的时间格式

3commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮* Date:2007-8-15

4commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮*/

5commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮package org.apache.commons.net.ftp.parser;

6commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮

7commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮import java.text.ParseException;

8commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮import java.text.ParsePosition;

9commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮import java.text.SimpleDateFormat;

10commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮import java.util.Calendar;

11commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮import java.util.Date;

12commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮

13commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮/** *//**

14commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮* @author hzwei206

15commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮* FTPTimestampParserImpl的扩展类,使之支持中文环境的时间格式

16commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮*/

17commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮public class FTPTimestampParserImplExZH extends FTPTimestampParserImpl

18commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮{

19commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 private SimpleDateFormat defaultDateFormat = new SimpleDateFormat("mm d hh:mm");

20commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 private SimpleDateFormat recentDateFormat = new SimpleDateFormat("yyyy mm d");

21commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮

22commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 /** *//**

23commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 * @author hzwei206

24commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 * 将中文环境的时间格式进行转换

25commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 */

26commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 private String formatDate_Zh2En(String timeStrZh)

27commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮{

28commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 if (timeStrZh == null)

29commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮{

30commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 return "";

31commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 }

32commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮

33commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 int len = timeStrZh.length();

34commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 StringBuffer sb = new StringBuffer(len);

35commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 char ch = ' ';

36commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 for (int i = 0;i < len;i++)

37commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮{

38commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 ch = timeStrZh.charAt(i);

39commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 if ((ch >= '0' && ch <= '9') || ch == ' ' || ch == ':')

40commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮{

41commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 sb.append(ch);

42commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 }

43commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 }

44commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮

45commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 return sb.toString();

46commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 }

47commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮

48commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 /** *//**

49commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 * Implements the one {@link FTPTimestampParser#parseTimestamp(String) method}

50commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 * in the {@link FTPTimestampParser FTPTimestampParser} interface

51commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 * according to this algorithm:

52commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 *

53commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 * If the recentDateFormat member has been defined, try to parse the

54commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 * supplied string with that. If that parse fails, or if the recentDateFormat

55commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 * member has not been defined, attempt to parse with the defaultDateFormat

56commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 * member. If that fails, throw a ParseException.

57commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 *

58commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 * @see org.apache.commons.net.ftp.parser.FTPTimestampParser#parseTimestamp(java.lang.String)

59commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 */

60commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 public Calendar parseTimestamp(String timestampStr) throws ParseException

61commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮{

62commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 timestampStr = formatDate_Zh2En(timestampStr);

63commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 Calendar now = Calendar.getInstance();

64commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 now.setTimeZone(this.getServerTimeZone());

65commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮

66commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 Calendar working = Calendar.getInstance();

67commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 working.setTimeZone(this.getServerTimeZone());

68commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 ParsePosition pp = new ParsePosition(0);

69commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮

70commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 Date parsed = null;

71commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 if (this.recentDateFormat != null)

72commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮{

73commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 parsed = recentDateFormat.parse(timestampStr, pp);

74commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 }

75commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 if (parsed != null && pp.getIndex() == timestampStr.length())

76commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮{

77commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 working.setTime(parsed);

78commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 working.set(Calendar.YEAR, now.get(Calendar.YEAR));

79commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 if (working.after(now))

80commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮{

81commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 working.add(Calendar.YEAR, -1);

82commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 }

83commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 }

84commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 else

85commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮{

86commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 pp = new ParsePosition(0);

87commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 parsed = defaultDateFormat.parse(timestampStr, pp);

88commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 // note, length checks are mandatory for us since

89commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 // SimpleDateFormat methods will succeed if less than

90commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 // full string is matched. They will also accept,

91commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 // despite "leniency" setting, a two-digit number as

92commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 // a valid year (e.g. 22:04 will parse as 22 A.D.)

93commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 // so could mistakenly confuse an hour with a year,

94commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 // if we don't insist on full length parsing.

95commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 if (parsed != null && pp.getIndex() == timestampStr.length())

96commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮{

97commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 working.setTime(parsed);

98commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 }

99commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 else

100commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮{

101commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 throw new ParseException(

102commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 "Timestamp could not be parsed with older or recent DateFormat",

103commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 pp.getIndex());

104commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 }

105commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 }

106commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 return working;

107commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 }

108commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮}

109commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮

110commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮

111commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮

 

(2) 修改org.apache.commons.net.ftp.parser.UnixFTPEntryParser类的parseFTPEntry方法:

 

1commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 public FTPFile parseFTPEntry(String entry)

2commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮{

3commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮..

4commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 if (matches(entry))

5commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮{

6commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 String typeStr = group(1);

7commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 String hardLinkCount = group(15);

8commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 String usr = group(16);

9commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 String grp = group(17);

10commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 String filesize = group(18);

11commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 String datestr = group(19) + " " + group(20);

12commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 String name = group(21);

13commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 String endtoken = group(22);

14commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮

15commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 try

16commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮{

17commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 file.setTimestamp(super.parseTimestamp(datestr));

18commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 }

19commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 catch (ParseException e)

20commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮{

21commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 /**//* ***mod by hzwei206 将中文时间格式转换 2007-8-15 begin*** */

22commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 //return null; // this is a parsing failure too.

23commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 try

24commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮{

25commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 FTPTimestampParserImplExZH Zh2En = new FTPTimestampParserImplExZH();

26commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 file.setTimestamp(Zh2En.parseTimestamp(datestr));

27commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 }

28commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 catch (ParseException e1)

29commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮{

30commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 return null; // this is a parsing failure too.

31commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 }

32commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 /**//* ***mod by hzwei206 将中文时间格式转换 2007-8-15 end*** */

33commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 }

34commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮

35commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮..

36commons.net包中的FTPClient.listFiles()方法返回null的问题及其解决方案(转)  - 动物凶猛 - 咬死月亮 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值