我使用apache.org中的库并使用java2s.com中的代码:
import org.apache.commons.net.ftp.FTPClient;
import java.io.IOException;
import java.io.FileOutputStream;
public class Main {
public static void main(String[] args) {
FTPClient client = new FTPClient();
FileOutputStream fos = null;
client.connect("ftp.domain.com");
client.login("admin", "secret");
client.enterLocalPassiveMode();
String filename = "sitemap.xml";
fos = new FileOutputStream(filename);
client.retrieveFile("/" + filename, fos);
fos.close();
client.disconnect();
}
}
我下载了库,将其移动到lib文件夹并将其重命名为cn.jar。
编译:(在Windows 7下)
javac -cp ".;lib\cn.jar" Main.java
运行:(在Windows 7下)
java -cp ".;lib\cn.jar" Main
我得到了:http://freelifer.narod.ru/some.png
如何解决?有什么问题?
答案 0 :(得分:1)
我的猜测:FTP协议定义了两个连接 - 数据连接和控制连接。您的示例代码成功建立了控制连接:
client.connect("ftp.domain.com");
client.login("admin", "secret");
FTPClient
的默认构造函数定义应以活动模式建立数据连接(这意味着服务器将在您请求文件时尝试打开与客户端的连接)。我认为由于您的防火墙或其他一些网络问题,无法打开数据连接。数据连接在此处打开:
client.retrieveFile("/" + filename, fos);
您可以尝试被动模式,也可以再次检查网络设置。通过调用FTPClient的enterLocalPassiveMode
方法进入被动模式。此方法会将PASV(或EPSV)命令发布到服务器。例如:
client.connect("ftp.domain.com");
client.login("admin", "secret");
client.enterLocalPassiveMode();
干杯!