使用FTPClient获取FTP站点文件列表时遇到的问题
最近需要通过org.apache.commons.net,从服务器读取一系列文件信息,发现遇到了一个诡异的问题,1 public static String downloadFile() throws Exception{
2 {
3 FTPClient ftp = new FTPClient();
4 ftp.connect("xxx.xxx.xxx.xxx", 21);
5 ftp.login("xx", "xx");
6 if (ftp.isConnected()) {
7 String dir = ftp.printWorkingDirectory();
8 ftp.cwd("/pcf/");
9 dir = ftp.printWorkingDirectory();
10 System.out.println(dir);
11 return Arrays.toString(ftp.listNames (dir));
12 } else {
13 return "error";
14 }
15 }
在运行的11行时,报了出了一个异常Exception in thread "main" java.net.SocketException: Software caused connection abort: socket write error,百度之,未能找到解决办法。然后上网检索FTPClient使用的示例代码,发现在示例中,登陆后需要设置被动模式
1 public static String downloadFile() throws Exception
2 {
3 FTPClient ftp = new FTPClient();
4 ftp.connect("xxx.xxx.xxx.xxx", 21);
5 ftp.login("xx", "xxx");
6 if (ftp.isConnected()) {
7 System.out.println(ftp.getReplyCode());
8 String dir = ftp.printWorkingDirectory();
9 System.out.println(dir);
10 ftp.cwd("/pcf/");
11 dir = ftp.printWorkingDirectory();
12 System.out.println(dir);
13 ftp.enterLocalPassiveMode();//设为被动模式
14 ftp.setFileType(FTP.BINARY_FILE_TYPE); //不设为二进制传送模式,会收不到0x0D
15 return Arrays.toString(ftp.listNames (dir));
16 } else {
17 return "error";
18 }
19 }
这时异常还是存在,但改变为 Exception in thread "main" java.net.SocketException: Permission denied: recv failed。
通过百度发现,如图搜索结果中的软件,在他的FAQ中提到,这是由于java7的bug,导致与win7防火墙不兼容导致。
再从百度中搜索,java7+ FTP,就可以发现许多对于此问题的解决方法。我直接将我的编译环境设置到 java 6 ,我的第一段代码就能正常使用了,特此记录!
页:
[1]