最近get到一个小知识点,创建sftp链接
依赖
<dependency>
<groupId>com.jcraft</groupId>
<artifactId>jsch</artifactId>
<version>0.1.50</version>
</dependency>
代码如下
package com.example.demo.test; import com.jcraft.jsch.*; import org.springframework.util.StringUtils; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.util.Properties; public class SftpTest { public static void main(String[] args) { String putLocalPath = "E:/Report50.docx"; String getLocalPath = "E:/"; String name = "Report50.docx"; String sftpPath = "/ss/dd/ffs"; files(putLocalPath,sftpPath,name,"123456","root","192.168.1.1",22); } public static void files(String localPath,String sftpPath,String name,String pwd,String user,String ip,Integer port) { Session root=null; Channel channel = null; ChannelSftp channelSftp=null; try { //获取session JSch jSch = new JSch(); //设置用户名,服务器ip,端口号 root = jSch.getSession(user, ip, port); //设置密码 root.setPassword(pwd); //设置首次登陆后,免密登陆 Properties sshConfig = new Properties(); sshConfig.setProperty("StrictHostKeyChecking","no"); root.setConfig(sshConfig); root.connect(); channel = root.openChannel("sftp"); channel.connect(); channelSftp = (ChannelSftp)channel; mkdir(channelSftp,sftpPath); channelSftp.cd(sftpPath); // putFile(channelSftp,new File(localPath),sftpPath); // getFile(channelSftp,sftpPath,localPath,name); deleteSftp(channelSftp,sftpPath,sftpPath); } catch ( JSchException |SftpException e) { e.printStackTrace(); }finally { close(channelSftp,channel,root); } } /** * 把路径下的文件上传指定服务器 * @param channelSftp * @param f * @param dst * @return */ public static String putFile(ChannelSftp channelSftp,File f, String dst){ try { channelSftp.cd(dst); channelSftp.put(new FileInputStream(f),f.getName()); } catch (FileNotFoundException | SftpException e) { e.printStackTrace(); return "上传失败"; } return "上传成功"; } /** * 下载 * @param channelSftp * @param sftpPath * @param localPath * @param name * @return */ public static String getFile(ChannelSftp channelSftp,String sftpPath,String localPath,String name){ try { channelSftp.cd(sftpPath); channelSftp.get(name,localPath); } catch (SftpException e) { e.printStackTrace(); return "下载失败"; } return "下载成功"; } /** * 删除 * @param channelSftp * @param sftpPath * @param name * @return */ public static String deleteSftp(ChannelSftp channelSftp,String sftpPath,String name){ try { channelSftp.cd(sftpPath); channelSftp.rm(name); } catch (SftpException e) { e.printStackTrace(); return "删除失败"; } return "删除成功"; } /** * 判断路径是否存在 * @param channelSftp * @param dirPath 路径 * @return */ public static SftpATTRS isDirExist (ChannelSftp channelSftp,String dirPath){ SftpATTRS attrs = null; try { System.out.println(channelSftp.pwd()); // attrs = channelSftp.stat(dirPath); attrs = channelSftp.lstat(dirPath); } catch (Exception e) { // e.printStackTrace(); } return attrs; } public static void mkdir(ChannelSftp channelSftp,String dirPath){ SftpATTRS attrs = isDirExist(channelSftp,dirPath); if(attrs == null){ try { channelSftp.cd("/"); String[] dirs = dirPath.split("/"); for(int i=0;i<dirs.length;i++){ if(StringUtils.isEmpty(dirs[i])){ continue; } attrs = isDirExist(channelSftp,dirs[i]); if(attrs == null){ channelSftp.mkdir(dirs[i]); channelSftp.cd(dirs[i]); }else { channelSftp.cd(dirs[i]); } } } catch (SftpException e) { e.printStackTrace(); System.out.println("创建失败"); } } } public static void close(ChannelSftp channelSftp,Channel channel,Session session) { if(channel != null){ channel.disconnect(); } if(channelSftp != null){ channelSftp.disconnect(); } if(session != null){ session.disconnect(); } } }