遇到的问题:
- 连接上ftp服务器之后,卡死,没有任何响应
- 下载下来的压缩文件总是报错,压缩包被损坏
解决方案:
- 将ftpClient设置为 PASSIVE_LOCAL_DATA_CONNECTION_MODE 模式
- 将ftpClient设置为FTP.BINARY_FILE_TYPE
public static void main(String[] args) throws IOException {
FTPClient ftp = new FTPClient();
ftp.connect("xxx", 111);
ftp.login("xxx", "xxx");
System.out.println("Connected to " + ftp + ".");
System.out.print(ftp.getReplyString());
int reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
System.err.println("FTP server refused connection.");
System.exit(1);
}
ftp.enterLocalPassiveMode();
ftp.setFileType(FTP.BINARY_FILE_TYPE);
copyFiles("", "D:/test", ftp);
}
知识积累
-
FtpClient的连接方式有4种
- ACTIVE_LOCAL_DATA_CONNECTION_MODE --默认
- PASSIVE_LOCAL_DATA_CONNECTION_MODE
- ACTIVE_REMOTE_DATA_CONNECTION_MODE
- PASSIVE_REMOTE_DATA_CONNECTION_MODE
按主体分为两大类,一类是用于client与server之间的通信(带LOCAL),一类是用于server与server间的通信(带REMOTE) 按方式分为两大类,一类是主动模式,一种是被动模式。主动模式的意思在API中的说明是在建立了连接之后,如果server端有新的数据,server端会主动连接client端发送数据。 被动模式,就是在连接的这一刻就告诉server要与client建立起连接来传输数据
-
FtpClient的文件类型
- ASCII_FILE_TYPE --默认
- BINARY_FILE_TYPE
在传输内容是ASCII码文本时,文件的内容可能会被调整造成文件损坏,而BINARY类型会保证文件内容不被改变