java 操作ftp服务器

java 操作ftp服务器

package easy.ftpService;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.*;

import org.apache.commons.net.ftp.FTP;
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;

public class Ftp {

	private String Control_Encoding = "UTF-8";

	private FTPClient client = null;

	private String host = "";
	private int port = 21;
	private String user = "";
	private String password = "";
	private String ftpPath = "/";
	private String configFile = "ftpconfig";
	// FTP名称
	private String ftpName;
	// 属性集
	private ResourceBundle property = null;

	@SuppressWarnings("unused")
	private Ftp() {
	}

	public Ftp(String host, int port, String user, String pwd) {
		this.host = host;
		this.port = port;
		this.user = user;
		this.password = pwd;
	}


	public Ftp(String ftpName) {
		this.ftpName = ftpName;
		setArg(configFile);
	}
	/**
	 * 设置参数
	 *
	 * @param configFile 参数的配置文件
	 */
	private void setArg(String configFile) {
		try {
			property = ResourceBundle.getBundle(configFile);
			user = property.getString(ftpName + "username");
			password = property.getString(ftpName + "password");
			host = property.getString(ftpName + "host");
			port = Integer.parseInt(property.getString(ftpName + "port"));
		} catch (Exception e) {
			System.out.println("配置文件 " + configFile + " 无法读取!");
		}
	}

	/**
	 * 获取当前FTP所在目录位置
	 * 
	 * @return
	 */
	public String getHome() {
		return this.ftpPath;
	}

	/**
	 * 连接FTP Server
	 * 
	 * @throws IOException
	 */
	public static final String ANONYMOUS_USER = "anonymous";

	public void connect() throws Exception {
		if (client == null) {
			client = new FTPClient();
		}
		// 已经连接
		if (client.isConnected()) {
			return;
		}

		// 编码
		client.setControlEncoding(Control_Encoding);

		try {
			// 连接FTP Server
			client.connect(this.host, this.port);
			// 登陆
			if (this.user == null || "".equals(this.user)) {
				// 使用匿名登陆
				client.login(ANONYMOUS_USER, ANONYMOUS_USER);
			} else {
				client.login(this.user, this.password);
			}
			// 设置文件格式
			client.setFileType(FTPClient.BINARY_FILE_TYPE);
			// 获取FTP Server 应答
			int reply = client.getReplyCode();
			if (!FTPReply.isPositiveCompletion(reply)) {
				client.disconnect();
				throw new Exception("connection FTP fail!");
			}

			FTPClientConfig config = new FTPClientConfig(client.getSystemType().split(" ")[0]);
			config.setServerLanguageCode("zh");
			client.configure(config);
			// 使用被动模式设为默认
			client.enterLocalPassiveMode();
			// 二进制文件支持
			client.setFileType(FTP.BINARY_FILE_TYPE);
			// 设置模式
			client.setFileTransferMode(FTP.STREAM_TRANSFER_MODE);

		} catch (IOException e) {
			throw new Exception("connection FTP fail! " + e);
		}
	}

	/**
	 * 断开FTP连接
	 * 
	 * @param
	 * @throws IOException
	 */
	public void close() {
		if (client != null && client.isConnected()) {
			try {
				client.logout();
				client.disconnect();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
	}

	/**
	 * 获取文件列表
	 * 
	 * @return
	 */
	public List<FTPFile> list() {
		List<FTPFile> list = null;
		try {
			FTPFile ff[] = client.listFiles(ftpPath);
			if (ff != null && ff.length > 0) {
				list = new ArrayList<FTPFile>(ff.length);
				Collections.addAll(list, ff);
			} else {
				list = new ArrayList<FTPFile>(0);
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		return list;
	}

	/**
	 * 切换目录
	 * 
	 * @param path
	 *            需要切换的目录
	 * @param forcedIncrease
	 *            如果目录不存在,是否增加
	 */
	public void switchDirectory(String path, boolean forcedIncrease) {
		try {
			if (path != null && !"".equals(path)) {
				boolean ok = client.changeWorkingDirectory(path);
				if (ok) {
					this.ftpPath = path;
				} else if (forcedIncrease) {
					// ftpPath 不存在,手动创建目录
					StringTokenizer token = new StringTokenizer(path, "\\//");
					while (token.hasMoreTokens()) {
						String npath = token.nextToken();
						client.makeDirectory(npath);
						client.changeWorkingDirectory(npath);
						if (ok) {
							this.ftpPath = path;
						}
					}
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 创建目录
	 * 
	 * @param path
	 */
	public void createDirectory(String path) {
		try {
			if (path != null && !"".equals(path)) {
				boolean ok = client.changeWorkingDirectory(path);
				if (!ok) {
					// ftpPath 不存在,手动创建目录
					StringTokenizer token = new StringTokenizer(path, "\\//");
					while (token.hasMoreTokens()) {
						String npath = token.nextToken();
						client.makeDirectory(npath);
						client.changeWorkingDirectory(npath);
					}
				}
			}
			client.changeWorkingDirectory(this.ftpPath);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 删除目录,如果目录中存在文件或者文件夹则删除失败
	 * 
	 * @param path
	 * @return
	 */
	public boolean deleteDirectory(String path) {
		boolean flag = false;
		try {
			flag = client.removeDirectory(path);
		} catch (IOException e) {
			e.printStackTrace();
		}
		return flag;
	}

	/**
	 * 删除文件
	 * 
	 * @param path
	 * @return
	 */
	public boolean deleteFile(String path) {
		boolean flag = false;
		try {
			flag = client.deleteFile(path);
		} catch (IOException e) {
			e.printStackTrace();
		}
		return flag;
	}

	/**
	 * 上传文件,上传文件只会传到当前所在目录
	 * 
	 * @param localFile
	 *            本地文件
	 * @return
	 */
	public boolean upload(File localFile) {
		return this.upload(localFile, "");
	}

	/**
	 * 上传文件,会覆盖FTP上原有文件
	 * 
	 * @param localFile
	 *            本地文件
	 * @param reName
	 *            重名
	 * @return
	 */
	public boolean upload(File localFile, String reName) {
		boolean flag = false;
		String targetName = reName;
		// 设置上传后文件名
		if (reName == null || "".equals(reName)) {
			targetName = localFile.getName();
		}
		FileInputStream fis = null;
		try {
			// 开始上传文件
			fis = new FileInputStream(localFile);
			client.setControlEncoding(Control_Encoding);
			client.setFileType(FTPClient.BINARY_FILE_TYPE);
			boolean ok = client.storeFile(targetName, fis);
			if (ok) {
				flag = true;
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		return flag;
	}

	/**
	 * 下载文件,如果存在会覆盖原文件
	 * 
	 * @param ftpFileName
	 *            文件名称,FTP上的文件名称
	 * @param savePath
	 *            保存目录,本地保存目录
	 * @return
	 */
	public boolean download(String ftpFileName, String savePath) {
		boolean flag = false;

		File dir = new File(savePath);

		if (!dir.exists()) {
			dir.mkdirs();
		}

		FileOutputStream fos = null;
		try {
			String saveFile = dir.getAbsolutePath() + File.separator + ftpFileName;
			fos = new FileOutputStream(new File(saveFile));
			boolean ok = client.retrieveFile(ftpFileName, fos);
			if (ok) {
				flag = true;
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
		return flag;
	}

	public static void main(String args[]) {



		// 创建FTP对象
		Ftp ftp = new Ftp("ATTATEST_");
		try {
			// 连接FTP
			ftp.connect();

			// 移动工作空间、切换目录
			System.out.println("当前位置:" + ftp.getHome());
			ftp.switchDirectory("/test", true);
			System.out.println("当前位置:" + ftp.getHome());

			// 查询目录下的所有文件夹以及文件
			List<FTPFile> list = ftp.list();
			System.out.println("|-- " + ftp.getHome());
			for (FTPFile f : list) {
				System.out.println(" |-- [" + (f.getType() == 0 ? "文件" : "文件夹") + "]" + f.getName());
			}

			// 上传文件
		  boolean r1 = ftp.upload(new File("D:\\FTPLocalService\\沃尔沃若.docx"), "测试文件2.txt");
		  System.out.println("上传文件:" + r1);

		  // 下载文件
		  boolean r2 = ftp.download("沃尔沃若.docx", "C:\\Users\\Administrator\\Desktop");
		  System.out.println("下载文件:" + r2);

		  // 删除文件
			boolean r3 = ftp.deleteFile("/test/测试文件2.txt");
			System.out.println("删除文件:" + r3);

			// 删除目录
			boolean r4 = ftp.deleteDirectory("/test");
			System.out.println("删除目录:" + r4);

		} catch (Exception e) {
			e.printStackTrace();
		}

		ftp.close();
	}

}

#FTP配置文件
#============Attachment============#
ATTACHMENT_username=1
ATTACHMENT_password=1
ATTACHMENT_host=1
ATTACHMENT_port=1

ATTATEST_username=bank
ATTATEST_password=bank@2019
ATTATEST_host=182.43.136.119
ATTATEST_port=56321
pom
		<dependency>
            <groupId>com.jcraft</groupId>
            <artifactId>jsch</artifactId>
            <version>0.1.55</version>
        </dependency>


        <dependency>
            <groupId>commons-net</groupId>
            <artifactId>commons-net</artifactId>
            <version>3.3</version>
        </dependency>
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值