1.jar包
commons-net-1.4.1.jar
jakarta-oro-2.0.8.jar
slf4j-api-1.6.4.jar
2.ftp模拟工具
FTPServer.exe这个工具,这个工具不需要安装。
3.java代码
private Logger _log = LoggerFactory.getLogger(this.getClass());
private static FTPClient ftpClient;
private static boolean isLogin;
/**
* 连接ftp
*
* @param hostname
* ftp服务器的host
* @param port
* ftp服务器的端口
* @param username
* ftp服务器的帐号
* @param password
* ftp服务器的密码
* @return
*/
public boolean connectServer(String hostname, int port, String username,
String password) {
isLogin = false;
ftpClient = new FTPClient();
try {
_log.info("正在连接到 " + hostname + ":" + port + "...");
ftpClient.connect(hostname, port);
_log.info("服务器应答码: " + ftpClient.getReplyCode());
if (ftpClient.isConnected()) {
isLogin = ftpClient.login(username, password);
if (isLogin) {
_log.info("已连接! ");
_log.debug("当前目录" + ftpClient.pwd());
}
}
} catch (Exception e) {
_log.info("连接失败,原因: " + e.getMessage());
e.printStackTrace();
}
return isLogin;
}
/**
* 下载
*
* @param localPath
* 下载的目标目录
* @param remotePath
* 下载的远端目录
* @param fileName
* 下载远端中文件的名称
*/
public void download(String localPath, String remotePath, String fileName) {
try {
// 设置被动模式
ftpClient.enterLocalPassiveMode();
// 设置以二进制方式传输
ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
ftpClient.changeWorkingDirectory(remotePath);// 转移到FTP服务器目录
FTPFile[] fs = ftpClient.listFiles();
_log.info("目录" + remotePath + "下的文件个数为" + fs.length);
boolean flag = false;
for (FTPFile ff : fs) {
if (ff.getName().equals(fileName)) {
_log.info("找到名为" + fileName + "的文件");
File localFile = new File(localPath + File.separator
+ ff.getName());
FileOutputStream is = new FileOutputStream(localFile);
ftpClient.retrieveFile(ff.getName(), is);
is.close();
flag = true;
_log.info("文件下载完成!");
}
}
if (!flag) {
_log.info("未找到名为" + fileName + "的文件");
_log.info("文件获取失败");
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ftpClient.isConnected()) {
try {
ftpClient.disconnect();
} catch (IOException ioe) {
}
}
}
}
/**
* 向FTP服务器上传文件
*
* @param path
* FTP服务器保存目录
* @param filename
* 上传到FTP服务器上的文件名
* @param input
* 输入流
* @return 成功返回true,否则返回fals
*/
public void uploadFile(String path, String filename, InputStream input) {
try {
boolean flag = false;
int reply;
reply = ftpClient.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftpClient.disconnect();
_log.debug("replyCode 错误");
}
ftpClient.changeWorkingDirectory(path);
ftpClient.storeFile(filename, input);
input.close();
flag = true;
_log.debug("上传成功!");
ftpClient.logout();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (ftpClient.isConnected()) {
ftpClient.disconnect();
_log.debug("已从服务器断开");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
// 测试
public static void main(String[] args) {
FtpTest ftp = new FtpTest();
boolean isConnected = ftp.connectServer("130.233.1.160", 21, "strive",
"123456");
// 测试下载
if (isConnected) {
ftp.download("c:\\", "\\src\\ftp", "FtpUtil.java");
}
// 测试上传
// if(isConnected){
// try {
// FileInputStream in = new FileInputStream(new File("D:/11888.log"));
// ftp.uploadFile("src", "test.txt", in);
// } catch (FileNotFoundException e) {
// e.printStackTrace();
// }
// }
}
爱生活,爱分享,爱康宝。有问题请大家提出。欢迎分享。