apache-commons-net Ftp 进行文件、文件夹的上传下载及日志的输出

原创 2012年05月15日 16:29:24

用到了apache 的 commons-net-3.0.1.jar 和 log4j-1.2.15.jar 这连个jar包

JAVA 代码如下:

package com.bjut.edu.cn.ftp;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.TimeZone;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPClientConfig;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;

import org.apache.log4j.Logger;

public class Ftp {
	private FTPClient ftpClient;
	private String strIp;
	private int intPort;
	private String user;
	private String password;

	private static Logger logger = Logger.getLogger(Ftp.class.getName());

	/* *
	 * Ftp构造函数
	 */
	public Ftp(String strIp, int intPort, String user, String Password) {
		this.strIp = strIp;
		this.intPort = intPort;
		this.user = user;
		this.password = Password;
		this.ftpClient = new FTPClient();
	}
	/**
	 * @return 判断是否登入成功
	 * */
	public boolean ftpLogin() {
		boolean isLogin = false;
		FTPClientConfig ftpClientConfig = new FTPClientConfig();
		ftpClientConfig.setServerTimeZoneId(TimeZone.getDefault().getID());
		this.ftpClient.setControlEncoding("GBK");
		this.ftpClient.configure(ftpClientConfig);
		try {
			if (this.intPort > 0) {
				this.ftpClient.connect(this.strIp, this.intPort);
			} else {
				this.ftpClient.connect(this.strIp);
			}
			// FTP服务器连接回答
			int reply = this.ftpClient.getReplyCode();
			if (!FTPReply.isPositiveCompletion(reply)) {
				this.ftpClient.disconnect();
				logger.error("登录FTP服务失败!");
				return isLogin;
			}
			this.ftpClient.login(this.user, this.password);
			// 设置传输协议
			this.ftpClient.enterLocalPassiveMode();
			this.ftpClient.setFileType(FTPClient.BINARY_FILE_TYPE);
			logger.info("恭喜" + this.user + "成功登陆FTP服务器");
			isLogin = true;
		} catch (Exception e) {
			e.printStackTrace();
			logger.error(this.user + "登录FTP服务失败!" + e.getMessage());
		}
		this.ftpClient.setBufferSize(1024 * 2);
		this.ftpClient.setDataTimeout(30 * 1000);
		return isLogin;
	}

	/**
	 * @退出关闭服务器链接
	 * */
	public void ftpLogOut() {
		if (null != this.ftpClient && this.ftpClient.isConnected()) {
			try {
				boolean reuslt = this.ftpClient.logout();// 退出FTP服务器
				if (reuslt) {
					logger.info("成功退出服务器");
				}
			} catch (IOException e) {
				e.printStackTrace();
				logger.warn("退出FTP服务器异常!" + e.getMessage());
			} finally {
				try {
					this.ftpClient.disconnect();// 关闭FTP服务器的连接
				} catch (IOException e) {
					e.printStackTrace();
					logger.warn("关闭FTP服务器的连接异常!");
				}
			}
		}
	}

	/***
	 * 上传Ftp文件
	 * @param localFile 当地文件
	 * @param romotUpLoadePath上传服务器路径 - 应该以/结束
	 * */
	public boolean uploadFile(File localFile, String romotUpLoadePath) {
		BufferedInputStream inStream = null;
		boolean success = false;
		try {
			this.ftpClient.changeWorkingDirectory(romotUpLoadePath);// 改变工作路径
			inStream = new BufferedInputStream(new FileInputStream(localFile));
			logger.info(localFile.getName() + "开始上传.....");
			success = this.ftpClient.storeFile(localFile.getName(), inStream);
			if (success == true) {
				logger.info(localFile.getName() + "上传成功");
				return success;
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
			logger.error(localFile + "未找到");
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (inStream != null) {
				try {
					inStream.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		return success;
	}

	/***
	 * 下载文件
	 * @param remoteFileName   待下载文件名称
	 * @param localDires 下载到当地那个路径下
	 * @param remoteDownLoadPath remoteFileName所在的路径
	 * */

	public boolean downloadFile(String remoteFileName, String localDires,
			String remoteDownLoadPath) {
		String strFilePath = localDires + remoteFileName;
		BufferedOutputStream outStream = null;
		boolean success = false;
		try {
			this.ftpClient.changeWorkingDirectory(remoteDownLoadPath);
			outStream = new BufferedOutputStream(new FileOutputStream(
					strFilePath));
			logger.info(remoteFileName + "开始下载....");
			success = this.ftpClient.retrieveFile(remoteFileName, outStream);
			if (success == true) {
				logger.info(remoteFileName + "成功下载到" + strFilePath);
				return success;
			}
		} catch (Exception e) {
			e.printStackTrace();
			logger.error(remoteFileName + "下载失败");
		} finally {
			if (null != outStream) {
				try {
					outStream.flush();
					outStream.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		if (success == false) {
			logger.error(remoteFileName + "下载失败!!!");
		}
		return success;
	}

	/***
	 * @上传文件夹
	 * @param localDirectory
	 *            当地文件夹
	 * @param remoteDirectoryPath
	 *            Ftp 服务器路径 以目录"/"结束
	 * */
	public boolean uploadDirectory(String localDirectory,
			String remoteDirectoryPath) {
		File src = new File(localDirectory);
		try {
			remoteDirectoryPath = remoteDirectoryPath + src.getName() + "/";
			this.ftpClient.makeDirectory(remoteDirectoryPath);
			// ftpClient.listDirectories();
		} catch (IOException e) {
			e.printStackTrace();
			logger.info(remoteDirectoryPath + "目录创建失败");
		}
		File[] allFile = src.listFiles();
		for (int currentFile = 0; currentFile < allFile.length; currentFile++) {
			if (!allFile[currentFile].isDirectory()) {
				String srcName = allFile[currentFile].getPath().toString();
				uploadFile(new File(srcName), remoteDirectoryPath);
			}
		}
		for (int currentFile = 0; currentFile < allFile.length; currentFile++) {
			if (allFile[currentFile].isDirectory()) {
				// 递归
				uploadDirectory(allFile[currentFile].getPath().toString(),
						remoteDirectoryPath);
			}
		}
		return true;
	}

	/***
	 * @下载文件夹
	 * @param localDirectoryPath本地地址
	 * @param remoteDirectory 远程文件夹
	 * */
	public boolean downLoadDirectory(String localDirectoryPath,String remoteDirectory) {
		try {
			String fileName = new File(remoteDirectory).getName();
			localDirectoryPath = localDirectoryPath + fileName + "//";
			new File(localDirectoryPath).mkdirs();
			FTPFile[] allFile = this.ftpClient.listFiles(remoteDirectory);
			for (int currentFile = 0; currentFile < allFile.length; currentFile++) {
				if (!allFile[currentFile].isDirectory()) {
					downloadFile(allFile[currentFile].getName(),localDirectoryPath, remoteDirectory);
				}
			}
			for (int currentFile = 0; currentFile < allFile.length; currentFile++) {
				if (allFile[currentFile].isDirectory()) {
					String strremoteDirectoryPath = remoteDirectory + "/"+ allFile[currentFile].getName();
					downLoadDirectory(localDirectoryPath,strremoteDirectoryPath);
				}
			}
		} catch (IOException e) {
			e.printStackTrace();
			logger.info("下载文件夹失败");
			return false;
		}
		return true;
	}
	// FtpClient的Set 和 Get 函数
	public FTPClient getFtpClient() {
		return ftpClient;
	}
	public void setFtpClient(FTPClient ftpClient) {
		this.ftpClient = ftpClient;
	}
	
	public static void main(String[] args) throws IOException {
		Ftp ftp=new Ftp("10.3.15.1",21,"ghips","ghipsteam");
		ftp.ftpLogin();
		//上传文件夹
		ftp.uploadDirectory("d://DataProtemp", "/home/data/");
		//下载文件夹
		ftp.downLoadDirectory("d://tmp//", "/home/data/DataProtemp");
		ftp.ftpLogOut();		
	}
}


Commons net实现 FTP上传下载

最近项目中需要到Ftp文件上传,选择了Commons net。Commons net包中的ftp工具类能够帮助我们轻松实现Ftp方式的文件上传/下载。其中最重要的一个类就是FTPClient类,这个提...
  • jdluojing
  • jdluojing
  • 2012年07月23日 17:18
  • 7074

基于 apache 的 commons-net-3.3.jar 的 ftp java代码上传下载文件

package com.genomics.ib.item.control; import java.io.File; import java.io.FileInputStream; ...
  • deng11342
  • deng11342
  • 2013年11月28日 17:14
  • 12652

org.apache.commons.net.ftp.FTPClient包下载

  • 2012年12月28日 21:23
  • 102KB
  • 下载

org.apache.commons.net.ftp jar包及FTP调用例子

  • 2015年09月15日 09:09
  • 415KB
  • 下载

使用Apache Commons Net包中的FTPClient实现javaFTP来上传目录(新)

package com.util;      import java.io.*;   import java.net.SocketException;   import java.text.S...
  • gaoqiao1988
  • gaoqiao1988
  • 2016年10月24日 13:47
  • 4539

使用Apache Commons Net包中的FTPClient实现javaFTP来上传目录(新)

ftpconfig.properties username=admin password=123 ip=192.168.14.117 port=21 实现类
  • yelove1990
  • yelove1990
  • 2014年11月18日 12:17
  • 2777

com.enterprisedt.net.ftp.FTPClient的jar包

  • 2009年06月18日 11:22
  • 102KB
  • 下载

FTP文件的上传和下载---org.apache.commons.net.ftp.FTPClient

FTP文件的上传和下载---org.apache.commons.net.ftp.FTPClient 2015-07-22 09:36 327人阅读 评论(0) 收藏 举报  ...
  • evilcry2012
  • evilcry2012
  • 2016年09月18日 09:44
  • 746

org.apache.commons.net.ftp.FTP**完整jar包

  • 2009年07月20日 11:40
  • 3.77MB
  • 下载

Apache Common-net Ftp客户端实例

转自:http://yangyangmyself.iteye.com/blog/1299997 本人参考Apache Common-net 2.2 的Api以及官方网的测试代码而写的FTP客户端操作...
  • xuanyuanlei1020
  • xuanyuanlei1020
  • 2015年05月08日 14:08
  • 1041
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:apache-commons-net Ftp 进行文件、文件夹的上传下载及日志的输出
举报原因:
原因补充:

(最多只允许输入30个字)