原先从远程FTP服务器获取文件都是正常的,最近对方的文件内容修改了,之后这两天获取到对方的文件后解压就失败了, 报错信息:java.util.zip.ZipException: invalid entry size
首先是验证对方的文件是否本身就有问题,但使用工具下载下来的文件是可以正常解压的,所以确认了还是程序有问题。因为最近有变动,所以猜测失败应该是和变动有关的。首先想到的就是对方在内容中加入了中文,之前是没有中文的。于是从这开始入手,搜了很多文章,也做了很多测试,最后在一次次的尝试中终于找到了问题所在。
原先的程序是:
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
ftpClient.login("xxxxxx", "xxxxxx");
这段程序是有问题的,正确的写法应该是将setFileType放到login之后。最终验证也的确是这个问题。
正确的写法:
ftpClient.login("xxxxxx", "xxxxxx");
ftpClient.setFileType(FTP.BINARY_FILE_TYPE); //顺序很重要
对于原因我的看法是由于setFileType其实最终都是向FTP服务器发送命令,在登陆之前设置fileType不起作用的,而默认的fileType是ascii的,所以碰到中文会有问题。应该是在登陆之后,再去进行设置。
我自己遇到的问题是下载ftp文件时,未设置fileType,导致下载的文件在解压读取时一直报错,加上已上的代码就ok了。
参考文章: http://blog.sina.com.cn/s/blog_8f99a1640102w1ab.html