java对sftp文件进行上传、下载、删除等操作,附详细demo

这是自己总结的一个类,包含连接sftp,上传,下载等操作,附件附有jar包


package com.patronli.web.service;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.util.Properties;
import java.util.Vector;
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpException;

/**
 * 
 * @author patronli
 *
 */
public class FtpService {
	/**
	 * 连接sftp服务器
	 * 
	 * @param host
	 *            主机
	 * @param port
	 *            端口
	 * @param username
	 *            用户名
	 * @param password
	 *            密码
	 * @return
	 */
	public ChannelSftp connect(String host, int port, String username,
			String password) {
		System.out.println("开始连接sftp");
		ChannelSftp sftp = null;
		try {
			JSch jsch = new JSch();
			jsch.getSession(username, host, port);
			Session sshSession = jsch.getSession(username, host, port);
			System.out.println("Session created.");
			sshSession.setPassword(password);
			Properties sshConfig = new Properties();
			sshConfig.put("StrictHostKeyChecking", "no");
			sshSession.setConfig(sshConfig);
			sshSession.connect();
			System.out.println("Session connected.");
			System.out.println("Opening Channel.");
			Channel channel = sshSession.openChannel("sftp");
			channel.connect();
			sftp = (ChannelSftp) channel;
			System.out.println("Connected to " + host + ".");
			System.out.println("连接sftp成功..");
		} catch (Exception e) {
			System.out.println("连接失败");
			e.printStackTrace();
		}
		return sftp;
	}

	/**
	 * 上传文件
	 * 
	 * @param directory
	 *            上传的目录
	 * @param uploadFile
	 *            要上传的文件
	 * @param sftp
	 */
	public void upload(String directory, String uploadFile, ChannelSftp sftp) {
		System.out.println("进入方法,开始读取文件");
		try {
			sftp.cd(directory);
			File file = new File(uploadFile);
			System.out.println("开始上传报表文件" + file.getName());
			sftp.put(new FileInputStream(file), file.getName());
			System.out.println("上传报表文件" + file.getName() + "完毕");
			System.out.println("上传报表文件成功");
		} catch (Exception e) {
			System.out.println("上传报表文件失败");
			e.printStackTrace();
		}
	}

	/**
	 * 下载文件
	 * 
	 * @param directory
	 *            下载目录
	 * @param downloadFile
	 *            下载的文件
	 * @param saveFile
	 *            存在本地的路径
	 * @param sftp
	 */
	public void download(String directory, ChannelSftp sftp, String path) {// sftp路径,链接,保存的路径+文件名
		try {
			sftp.cd(directory);
			File file = new File(path);
			sftp.get(path, new FileOutputStream(file));
			System.out.println("下载成功:" + path);
		} catch (Exception e) {
			System.out.println("下载文件出现异常:::");
			e.printStackTrace();
		}
	}

	/**
	 * 删除文件
	 * 
	 * @param directory
	 *            要删除文件所在目录
	 * @param deleteFile
	 *            要删除的文件
	 * @param sftp
	 */
	public void delete(String directory, String deleteFile, ChannelSftp sftp) {
		try {
			sftp.cd(directory);
			sftp.rm(deleteFile);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	/**
	 * 列出目录下的文件
	 * 
	 * @param directory
	 *            要列出的目录
	 * @param sftp
	 * @return
	 * @throws SftpException
	 */
	public Vector listFiles(String directory, ChannelSftp sftp)
			throws SftpException {
		return sftp.ls(directory);
	}

	public void deal(int judge) {
		String directory = "";
		String host = "101.231.206.140";// 服务器ip地址
		String username = "177760236";
		String password = "123456";
		int port = 21121;// 端口号
		String fileName = "patronli.txt";
		String localUrl = "F:\\";// 文件下载到本地的地址,虚拟机上的格式/home/fy_flg/reportFile/
		String path = localUrl + fileName;// 路径+文件名
		ChannelSftp sftp = connect(host, port, username, password);
		if (judge == 1) {// 表示下载
			directory = "/download/";// sftp操作文件的目录
			download(directory, sftp,path);// 下载文件--sftp目录,要下载的文件名字,下载到的地方,
		} else {
			directory = "/upload/";// sftp操作文件的目录
			upload(directory, path, sftp);// 上传--sftp目录,要上传文件的地址
		}
	}
  public static void main(String[] args) {
	  FtpService sf = new FtpService();
	  sf.deal(1);
}
}

猜你喜欢

转载自patronli.iteye.com/blog/2346803
今日推荐