有的时候需要用到java连接ftp服务器下载,上传一些操作,下面写了一个小例子。
/** ftp服务器地址 */
private String ftpHost;
/** ftp服务器用户名 */
private String ftpName;
/** ftp服务器密码 */
private String ftpPass;
/** ftp根目录 */
private String ftpDir;
/** 本地目录 */
private String localPath;
public boolean downloadFile(String path, String fileName) {
// 全部路径
String fullPath = path + fileName;
FTPClient client = new FTPClient();
// 超时
client.setConnectTimeout(30000);
File dir = new File(localPath + path);
// 判断此文件夹是否存在
if (!dir.exists())
dir.mkdirs();
try {
// 连接ftp
client.connect(ftpHost);
int replyCode = client.getReplyCode();
if (!FTPReply.isPositiveCompletion(replyCode)) {
client.disconnect();
return false;
}
replyCode = client.getReplyCode();
if (!FTPReply.isPositiveCompletion(replyCode)) {
client.quit();
return false;
}
// 登录
if (client.login(ftpName, ftpPass)) {
// 以2开头的返回值就会为真
if (!FTPReply.isPositiveCompletion(client.getReplyCode())) {
client.disconnect();
logger.error("连接ftp失败");
}
/** ftp server system type */
FTPClientConfig config = new FTPClientConfig(FTPClientConfig.SYST_UNIX);
/** server language */
config.setServerLanguageCode("zh");
/** server time zone */
config.setServerTimeZoneId("Asia/Shanghai");
/** ftp transfer mode in binary */
client.setFileTransferMode(FTP.BINARY_FILE_TYPE);
/** receive buffer size */
client.setReceiveBufferSize(524288);
client.configure(config);
client.setFileTransferMode(FTP.BINARY_FILE_TYPE);
client.setFileType(FTP.BINARY_FILE_TYPE);
client.changeWorkingDirectory(ftpDir);// 转移到FTP服务器目录
// 下载到本地
return client.retrieveFile(ftpDir + fullPath, new FileOutputStream(localPath + fullPath));
}
} catch (Exception e) {
e.printStackTrace();
return false;
} finally {
if (client.isConnected()) {
try {
client.logout();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return false;
}
里面的具体参数可以根据情况来设置,是用的apache的开源项目。