昨天换了个ftp服务器,发现程序出现了异常it.sauronsoftware.ftp4j.FTPListParseException,网上搜了下,说是FTPClient.list()时it.sauronsoftware.ftp4j.listparsers.DOSListParser对日期的解析出现了异常,参考了提供的解决方案,ftp服务器是不能随便动的,应用服务器语言环境也是不好修改的,只能修改ftp4j的源码。
网上下到源码http://sourceforge.net/projects/ftp4j/ 找到DOSListParser,日期的解析使用DATE_FORMAT
//private static final DateFormat DATE_FORMAT = new SimpleDateFormat("MM/dd/yy hh:mm a");修改前
private static final DateFormat DATE_FORMAT = new SimpleDateFormat("MM/dd/yy hh:mm a", Locale.ENGLISH);
ftp返回的文件列表类似"01-06-16 06:02AM 2245 ****.txt",DOSListParser一行一行的解析,组成日期格式"01/06/16 06:02 AM",使用DATE_FORMAT parse成日期,本来没什么问题就出现在"AM"上,修改前DATE_FORMAT的Locale是默认的,也就是和操作系统有关,我本地是windows地区是中国,因此"MM/dd/yy hh:mm a"不能解析"01/06/16 06:02 AM",而能够解析"01/06/16 06:02 上午",好办,修改如上DATE_FORMAT统一使用Locale.ENGLISH,既然DATE_FORMAT统一使用Locale.ENGLISH,那么兼容期间,对AM/PM进行转换,中文-》英文
ampm=("上午".equals(ampm)? "AM":("下午".equals(ampm)? "PM":ampm)); String mdString = month + "/" + day + "/" + year + " " + hour + ":" + minute + " " + ampm;
源码是用Ant打包的,导入idea中直接运行build的jar就好了,很顺利
补充下:ftp服务器架在windws上使用DOSListParser解析,架在linux上使用UnixListParser解析