这是本人第一篇原创,但是还是不知道写啥就索性把代码拷贝上来吧。
之所以用到这个知识,是由于希望通过一台web服务器页面方式访问与之链接的所有其他服务器的文件。
使用到的jar包来自 http://enterprisedt.com/products/edtftpj/
核心的类 : FileTransferClient(旧版本时使用FTPClient )
创建ftp对象
FileTransferClient ftp = new FileTransferClient();
设置登录信息
ftp.setRemoteHost(host);
ftp.setUserName(username);
ftp.setPassword(password);
连接服务器并且登录
ftp.connect();
退出并断开连接
ftp.disconnect();
连接服务器并且手动登录
ftp.connect();
ftp.manualLogin();
设置为非自动登录
ftp.getAdvancedFTPSettings().setAutoLogin(false);
传输模式(默认binary)
设置为ascii
ftp.setContentType(FTPTransferType.ASCII);
高级设置,设置传输连接模式,主动和被动都是相对server而言
设置为主动模式:服务器发起数据连接
ftp.getAdvancedFTPSettings().setConnectMode(FTPConnectMode.ACTIVE);
ftp.getAdvancedFTPSettings().setActivePortRange(61500, 61510);
被动模式:客户端发起数据连接,服务器监听
ftp.getAdvancedFTPSettings().setConnectMode(FTPConnectMode.PASV);
返回当前目录下的文件和目录
String[] files = ftp.directoryNameList();
返回当前目录下的文件和目录的详细信息
String[] descriptions = ftp.directoryNameList("mydirname", true);
以对象形式返回当前目录下的文件和目录的详细信息,对象里面包括大小、是否为目录等。
FTPFile[] files = ftp.directoryList();
获取当前目录
String directory = ftp.getRemoteDirectory();
改变当前目录
ftp.changeDirectory(directory);
回到上层目录
ftp.changeToParentDirectory();
上传文件(简单用法)
ftp.uploadFile(localFilePath, remoteFileName);
下载文件(简单用法)
ftp.downloadFile(localFilePath, remoteFileName);
删除文件
deleteFile(remoteFileName)
服务器为德国场所,客户端为英国场所,此时可能会报错,通过如下设置客户端场所转换,来避免此类问题
Locale[] locales = new Locale[2];
locales[0] = = Locale.GERMAN;
locales[1] = Locale.getDefault();
ftp.getAdvancedFTPSettings().setParserLocales(locales);
2、再附上一个自己写的简单jar包代码,实现了一个更高层的封装使用
/*** ** 使用两个函数即可达到便利下载文件的目的 * setPara设置参数, * download2下载文件 ** */ package com.xxx import java.util.Date; import com.enterprisedt.net.ftp.*; import com.enterprisedt.util.debug.*; /******** * 功能描述:ftp客户端功能,负责ftp请求和处理 * * */ public class ftpProc { //开发环境下 debugFlag设置为true,其他环境设置为false private boolean debugFlag = true; FileTransferClient ftp = null; String localFilePath = "D:\\"; //投产环境一定要修改 //public static int ftpCount = 5; //控制实例的数量,在创建 该对象前判断 public String fileFullName = ""; public ftpProc() { } /*** * 功能描述:封装的下载文件方法(建立链接,下载文件到本地临时目录,退出连接) * 参数:远程路径+文件名 * */ public boolean download2(String remoteFilePath) { if("" == conn()) { return false; } else { String fileName = remoteFilePath.substring(remoteFilePath.lastIndexOf("/")+1); fileFullName = localFilePath+"/"+fileName ; if(false == download(fileFullName, remoteFilePath)) { return false; } else { if(false==bye()) { return false; } } } return true; } /***** * 功能描述:设置登录参数 * 主机 用户名 密码 本地目录 */ public boolean setPara(String host, String username, String password, String localPath){ try{ ftp = new FileTransferClient(); ftp.setRemoteHost(host); ftp.setUserName(username); ftp.setPassword(password); localFilePath = localPath; } catch(FTPException ftpE){ Debug(""+ftpE.getReplyCode()); Debug(""+ftpE.toString()); return false; } catch(Exception e) { Debug(e.getMessage()); return false; } return true; } /***功能描述: 连接 登录并显示当前目录 * */ public String conn() { String remoteDir = ""; try{ ftp.connect(); remoteDir = ftp.getRemoteDirectory(); } catch(FTPException ftpE){ Debug(""+ftpE.getReplyCode()); Debug(""+ftpE.toString()); return ""; } catch(Exception e) { Debug(e.getMessage()); return ""; } return remoteDir; } /*****功能描述:下载文件 * localPath : 本地路径 * remoteFilename: 远程文件名(全路径) */ public boolean download(String localPath, String remoteFilename) { try{ if(ftp.exists(remoteFilename)){ ftp.downloadFile(localPath, remoteFilename); } else return false; } catch(FTPException ftpE){ Debug(""+ftpE.getReplyCode()); Debug(""+ftpE.toString()); return false; } catch(Exception e) { Debug(e.getMessage()); return false; } return true; } /*****退出ftp * */ public boolean bye() { try{ ftp.disconnect(); } catch(FTPException ftpE){ Debug(""+ftpE.getReplyCode()); Debug(""+ftpE.toString()); return false; } catch(Exception e) { Debug(e.getMessage()); return false; } return true; } private void Debug(String msg){ if(true==debugFlag){ Date logTime = new Date(); System.out.println(logTime.toString() + ":[ftp]:"+msg); } } }