FTP--实践可用

package sunline.common.logic.Utils;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.SocketException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;

import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
import org.apache.log4j.Logger;

import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.sunline.flow.base.annotation.Bizlet;

/**
 *
 * @author niucheng created 2017/05/08
 *
 */
public class FTPUtil {
	private static Logger logger = Logger.getLogger(FTPUtil.class);
	private static FTPClient ftpClient = null;

	// 连接FTP服务器
	@Bizlet("连接FTP服务器")
	public static boolean connect(String host, int port, String username,
			String password) {
		ftpClient = new FTPClient();
		boolean loginFlag = false;
		try {
			ftpClient.setControlEncoding("GBK");
			// 连接远程主机
			ftpClient.connect(host, port);
			if (password == null) {
				password = "";
			}
			// 登陆远程主机
			loginFlag = ftpClient.login(username, password);
			ftpClient.setDataTimeout(120000);
			ftpClient.enterLocalPassiveMode();
			ftpClient.setFileType(FTP.BINARY_FILE_TYPE);
			if (loginFlag == false) {
				logger.info("登录FTP远程主机失败");
				ftpClient.logout();
				if (ftpClient.isConnected()) {
					ftpClient.disconnect();
				}
				throw new Exception("登录失败!");
			} else {
				logger.info("登录FTP远程主机成功");
				return true;
			}
		} catch (Exception e) {
			new Exception("连接FTP服务器出错");
		}
		return false;
	}

	/**
	 * 注意:上传FTP时的绝对路径包括/dir/文件名,文件名跟本地要上传的文件名对应,切记切记
	 * @param local
	 *            本地文件绝对路径
	 * @param remoteDirectory
	 *            远程FTP文件绝对路径(包括文件名)
	 * @param localFileName
	 * @return
	 * @throws Exception
	 */
	@Bizlet(value = "上传文件")
	public static boolean upLoadFileFtp(String local, String remoteDirectory,
			String localFileName) throws Exception {
		InputStream is = null;
		boolean result = false;
		if (!ftpClient.isConnected()) {
			logger.info("FTP未连接");
			return false;
		}
		try {
			if (remoteDirectory != null && local != null) {
				//注意:这里的本地文件路径和FTP文件保存路径都是绝对路径(包括文件名,切记)
				remoteDirectory = new String((remoteDirectory + localFileName).getBytes("GBK"),
						"ISO-8859-1");
				local = new String((local + localFileName).getBytes("GBK"),
						"ISO-8859-1");
				is = new FileInputStream(new File(local));
				// 转移到FTP服务器目录
				boolean changeWorkingDirectory = ftpClient
						.changeWorkingDirectory(remoteDirectory);
				result = ftpClient.storeFile(remoteDirectory, is);
				System.out.println("上传结果" + localFileName + result);
				if (result) {
					logger.info("文件" + localFileName + "上传成功");
				} else {
					logger.info("文件" + localFileName + "上传失败");
				}
			}
		} catch (Exception e) {
			new Exception("文件上传出错");
		} finally {
			if (is != null) {
				try {
					is.close();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		}
		return result;
	}

	@Bizlet("批量上传文件")
	public static boolean bacthUploadFileFtp(String remoteDirectory,
			String localPath) {
		boolean result = false;
		try {
			File file = new File(localPath);
			File[] files = file.listFiles();
			for (int i = 0; i < files.length; i++) {
				// bak代表备份文件,-1代表不是备份文件
				if (files[i].isFile()
						&& files[i].getName().indexOf("bak") == -1) {
					result = upLoadFileFtp(localPath, remoteDirectory,
							files[i].getName());
				}
			}
			if (result == true) {
				logger.info("批量上传文件成功");
			} else {
				logger.info("批量上传文件失败");
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				ftpClient.disconnect();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return result;
	}

	// 判断FTP目录是否存在
	public static boolean isDirExist(String dir) {
		boolean flag = false;
		try {
			FTPFile[] ftpFileArr = ftpClient.listFiles(dir);
			System.out.println("目录不存在---------" + ftpFileArr.length);
			if (ftpFileArr.length > 0) {
				flag = true;
			}
		} catch (IOException e1) {
			return false;
		}
		return flag;
	}

	// 创建FTP目录
	public static boolean creatFtpDir(String ftpDir) {
		boolean flag = false;
		try {
			// 如果目录不存在就创建目录
			if (isDirExist(ftpDir) == false) {
				flag = ftpClient.makeDirectory(ftpDir);
				System.out.println("创建目录" + ftpDir + "结果:" + flag);
			}
		} catch (Exception e) {
			new Exception("创建 " + ftpDir + "目录出错");
		}
		return flag;
	}

	/*public static void main(String[] args) throws Exception {
		boolean connect = connect("160.161.12.122", 21, "sn", "sn");
		System.out.println("连接是否成功:" + connect);
		String remoteDirectory = "/home/sncx/ftp_data/bach/ibs/";
		String localPath = "D:/upload/";
		boolean up = bacthUploadFileFtp(remoteDirectory, localPath);

		System.out.println("上传结果---" + up);
	}*/
}

  

时间: 2025-02-01 15:44:05

FTP--实践可用的相关文章

沫沫金【实践可用】--web工程ORM数据库链接(JDBC)链接集群库||普通库,两种标准

普通链接配置,应用到集群会启动失败,请修改 集群数据库链接 jdbc.url=jdbc:oracle:thin:@//127.0.0.1:1521/momojin 普通数据库链接 jdbc.url=jdbc:oracle:thin:@127.0.0.1:1521/momojin 区别就在于:"//",如上所示 标红的地方.请务必清楚

Hadoop2.6.0 + Spark1.4.0 在Ubuntu14.10环境下的伪分布式集群的搭建(实践可用)

前言,之前曾多次搭建集群,由于疏于记录,每次搭建的时候到处翻阅博客,很是费劲,在此特别记录集群的搭建过程. 0.环境:Ubuntu14.10.Hadoop2.6.0.spark-1.4.0 1.安装jdk1.7 (1)下载jdk-7u25-linux-i586.tar.gz: (2)解压jdk-7u25-linux-i586.tar.gz,并将其移动到 /opt/java/jdk/路径下面 (3)配置java环境变量: 在 /etc/profile文件中追加 #set java env expo

网络编程- struct模块定制报头ftp实践(九)

一.server端import jsonimport structimport socket sk = socket.socket()sk.bind(('127.0.0.1',8080))sk.listen() conn,addr = sk.accept()dic_len = conn.recv(4) # 4个字节 数字的大小dic_len = struct.unpack('i',dic_len)[0]content = conn.recv(dic_len).decode('utf-8') #

剑指架构师系列-ftp服务器

1.安装FTP 我们在开发项目时,肯定需要专门的一台ftp服务器来存在上传的静态资源,今天我们就在CentOS下搭建一个ftp服务器. 1.安装vsftpd组件,安装完后,有/etc/vsftpd/vsftpd.conf 文件,用来配置,还有新建了一个ftp用户和ftp的组,指向home目录为/var/ftp,默认是nologin(不能登录系统) yum -y install vsftpd 可以用下面命令查看用户 cat /etc/passwd 默认ftp服务是没有启动的,用下面命令启动 /bi

linux开启FTP以及添加用户配置权限,只允许访问自身目录,不能跳转根目录

文章来源:http://www.cnblogs.com/mrcln/p/6179673.html 1.切换到root用户 2.查看是否安装vsftp,我这个是已经安装的. [[email protected] vsftpd]# rpm -qa |grep vsftpd vsftpd-3.0.2-11.el7_2.x86_64 3.如果没有发现,则安装. yum install vsftpd* -y 4.启动vsftpd服务,以及重启命令(centos7.0以上版本) [[email protec

centos 启用ftp功能

1.安装vsftpd组件,安装完后,有/etc/vsftpd/vsftpd.conf 文件,用来配置,还有新建了一个ftp用户和ftp的组,指向home目录为/var/ftp,默认是nologin(不能登录系统) yum -y install vsftpd 可以用下面命令查看用户 cat /etc/passwd 默认ftp服务是没有启动的,用下面命令启动 service vsftpd start 2.安装ftp客户端组件(用来验证是否vsftpd) yum -y install ftp 执行命令

centos启用ftp功能

1.安装vsftpd组件,安装完后,有/etc/vsftpd/vsftpd.conf 文件,用来配置,还有新建了一个ftp用户和ftp的组,指向home目录为/var/ftp,默认是nologin(不能登录系统) yum -y install vsftpd 可以用下面命令查看用户 cat /etc/passwd 默认ftp服务是没有启动的,用下面命令启动 service vsftpd start 2.安装ftp客户端组件(用来验证是否vsftpd) yum -y install ftp 执行命令

【转发】centos 7开启FTP以及添加用户配置权限,只允许访问自身目录,不能跳转根目录

1.切换到root用户 2.查看是否安装vsftp,我这个是已经安装的. [[email protected] vsftpd]# rpm -qa |grep vsftpd vsftpd-3.0.2-11.el7_2.x86_64 3.如果没有发现,则安装. yum install vsftpd* -y 4.启动vsftpd服务,以及重启命令(centos7.0以上版本) [[email protected] vsftpd]# /bin/systemctl start vsftpd.service

php扩展memcache的安装

1.安装memcache服务器 Memcached作为开放.免费.高效的.分布式的内存缓存系统受到很多网站的欢迎. 官网下载memcached源代码安装包,稳定版即可 官网:http://memcached.org/ 安装之前看看系统中是否安装libevent库,因为memcache依赖该库. 解压memcache安装包,进入目录执行./configure文件 tar -vxf memcached-1.4.25.tar.gz ./configure --prefix=/usr/local/mem

今天搞了一天的CentOS,唉,实在感觉自己渺小啊

从别人处转载一篇文章:http://my.oschina.net/idiotsky/blog/303545 这个文章讲的很好,因为告诉了我怎么去查看ftp有关的SElinux的bool变量值以及设定.虽然最后也没能够搞定我的ftp服务器,但是我觉得先不搞了.谢谢这个仁兄. 1.安装vsftpd组件,安装完后,有/etc/vsftpd/vsftpd.conf 文件,用来配置,还有新建了一个ftp用户和ftp的组,指向home目录为/var/ftp,默认是nologin(不能登录系统) ? 1 yu