SFTP工具类——切换目录,遍历保存一个目录,关闭资源,获取连接
2018-03-07 14:16
531 查看
最近搭建录音归档的测试环境,本来本机测试好好地,可惜环境变了样,ftp的链接变成了SFTP…有种想咬人的冲动。。。,还要改动大量代码,重新整一套ftp工具类,也是没办法的事情,谁让sftp更安全高效呢,下面开始交代吧~
import org.slf4j.Properties; import org.slf4j.LoggerFactory; import com.jcraft.jsch.ChannelSftp; import com.jcraft.jsch.JSch; import com.jcraft.jsch.JSchException; import com.jcraft.jsch.Session; import com.jcraft.jsch.SftpException; public class SftpUtils{ private static Logger logger = LoggerFactory.getLogger(SftpUtils.class); private static Session session = null; private static ChannelSftp channel = null; private static List<String> sftpList=new ArrayList<>(); //1.获取sftp连接 public static ChannelSftp connect(String host,int port,String username,String password){ ChannelSftp sftp = null; JSch jsch = new JSch(); try{ jsch.getSesssion(username,host,port); session=jsch.getSession(username,host,port); session.setPassword(password); Properties sshConfig=new Properties(); sshConfig.put("StrictHostKeyCheching","no"); session.setConfig(sshConfig); session.connect(); logger.info("session connected!"); channel=(ChannelSftp)session.openChannel("sftp"); channel.connect(); sftp=(ChannelSftp)channel; }catch(JSchException e){ logger.error("获取SFTP连接异常",e); } return sftp; } //2.打开或者进入指定目录 public static boolean openDir(String directory,ChannelSftp sftp){ try{ sftp.cd(directory); return true; }catc 4000 h(SftpException e){ logger.error(e+""); return false; } } //3.关闭资源 public static void close(){ if(channel != null){ channel.disconnect(); } if(session != null){ session.disconnect(); } } //4.遍历一个目录,并得到这个路径的集合list(等递归把这个目录下遍历结束后list存放的就是这个目录下的所有文件的路径集合) public boolean getSftpPathList(String pathName,ChannelSftp sftp)throws IOException,SftpException{ boolean fl =false; boolean flag=openDir(pathName,sftp); if(flag){ Vector vv = sftp.ls(pathName); if(vv == null && vv.size == 0){ return null; }else{ for(Object object : vv){ ChannelSftp.LsEntry entry=(ChannelSftp.LsEntry)object; String filename=entry.getFilename(); if(".".equeals(filename) || "..".equeals(filename)){ continue; } if(openDir(pathName+filename+"/"),sftp){ //能打开,说明是目录,接着遍历 getSftpList(pathName+filename+"/"),sftp); }else{ sftpList.add(pathName+filename); } } } }else{ log.info("对应的目录"+directory+"不存在!"); } if(sftpList != null && sftpList.size() > 0){ fl=true; } return fl; } }
相关文章推荐
- 数据库连接工具类——包含取得连接和关闭资源 ConnUtil.java
- QT http练习——创建一个能够下载URL资源的UI程序,并保存到本地指定目录下
- 一个获取指定目录下一定格式的文件名称和文件修改时间并保存为文件的python脚本
- JDBC获取连接、关闭连接的简单工具类2
- Android 获取手机图片保存的一个通用工具类
- 遍历一个目录下的文件,并把文件名保存在vector中
- JDBCTools 工具类(c3p0连接池获取连接,关闭连接,基本事务)
- FTP 和 SFTP上传,以及FTP上传时卡死、连接迟迟关闭不了,耗费资源,以及 SFTP上传时问题
- 如何获取一个目录下包含子目录内的所有文件名,并保存在一个数组中或XML文档里
- 代码调用DruidDataSource来管理conn连接,同时声明了ThreadLocal对象来保存每次线程请求所获取的连接,这样可以避免每个new一个JDBC
- python练习:获取一个目录后,遍历输出
- ubuntu设置好samba服务器后,windows登录共享目录时出现“Samba服务器 解决不允许一个用户使用一个以上用户名与一个服务器或共享资源的多重连接”
- 连接和关闭资源工具类
- 安卓中使用SharedPreferences实现软件参数的保存和从另外一个资源获取保存结果
- 封装一个JDBC的建立连接和关闭连接的工具类
- JDBC获取连接、关闭连接的简单工具类
- 一个获取指定目录下一定格式的文件名称和文件修改时间并保存为文件的python脚本
- 在jsp中获取数据库连接和关闭资源的方法
- 关于Spring工具类获取classpath下的文件资源
- tcp nio 远程主机强迫关闭了一个现有的连接