这是自己总结的一个类,包含连接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); } }