上篇文章记录了常用的文件操作,这里记录下通过SSH服务器操作Linux服务器的指定路径下的文件。
这里用到了第三方jar包 ,
1、删除服务器上指定路径下的所有文件(包括本目录)-经测试,在Linux下运行,没有问题
1 /** 2 * 删除 3 *@param dst 4 *@param sftpUtil 5 *@return 6 *@author qin_hqing 7 *@date 2015年7月6日 下午4:45:31 8 *@comment 9 */10 protected static boolean removeFileFromSSH(String dst, ChannelSftp chanSftp) {11 boolean bl = false;12 13 try {14 chanSftp.cd(dst);15 @SuppressWarnings("unchecked")16 Vectorv = chanSftp.ls(dst);17 if (v.size() == 2) { //空文件夹 直接删除18 chanSftp.rmdir(dst);19 }else {20 int delSize = 0;21 for (Iterator iterator = v.iterator(); iterator.hasNext();) {22 23 LsEntry lsEntry = (LsEntry) iterator.next();24 String ffName = lsEntry.getFilename();25 if (ffName.indexOf(".")>0) { // file 26 chanSftp.rm(ffName); //删除文件27 }else if(ffName.indexOf(".") == -1) {28 removeFileFromSSH(dst+ffName+File.separator, chanSftp); //如果路径有问题可以试着把 File.separator 改成 "/"试试29 chanSftp.cd(dst);30 }31 32 if (delSize == v.size()-1) { //当前文件夹下还存在文件夹33 removeFileFromSSH(dst, chanSftp);34 }35 delSize ++;36 }37 }38 39 bl = true;40 } catch (SftpException e) {41 e.printStackTrace();42 }43 44 return bl;45 }
2、上传文件到服务器
A)这里我们用到了一个工具类,该工具类主要功能是通过SSH连接到Linux服务器,释放资源,在服务器上创建路径,代码如下:
1 package fileUtil; 2 3 import java.io.File; 4 import java.util.ArrayList; 5 import java.util.List; 6 import java.util.Map; 7 import java.util.Properties; 8 import java.util.Vector; 9 10 import org.apache.log4j.Logger; 11 12 import com.jcraft.jsch.Channel; 13 import com.jcraft.jsch.ChannelSftp; 14 import com.jcraft.jsch.JSch; 15 import com.jcraft.jsch.JSchException; 16 import com.jcraft.jsch.Session; 17 import com.jcraft.jsch.SftpException; 18 19 /** 20 * @包名 util.sftp 21 * @文件名 SFTPChannelUtil.java 22 * @作者 Edi_Kai 23 * @创建日期 2015年7月3日 24 * @版本 V 1.0 25 * @描述 26 */ 27 public class SFTPChannelUtil { 28 29 private static final Logger LOG = Logger.getLogger(SFTPChannelUtil.class); 30 31 Session session = null; 32 Channel channel = null; 33 Listlist = new ArrayList (); 34 35 private static SFTPChannelUtil util; 36 37 public static SFTPChannelUtil getSftpChannelUtil() { 38 if (null == util) { 39 util = new SFTPChannelUtil(); 40 } 41 return util; 42 } 43 44 /** 45 * 获取ChannelSftp连接 46 *@param sftpDetails 47 *@param timeout 48 *@return 49 *@throws JSchException 50 *@author Edi_Kai 51 *@date 2015年7月3日 下午5:26:41 52 *@comment 53 */ 54 public ChannelSftp getChannel(Map sftpDetails, int timeout) 55 throws JSchException { 56 57 String ftpHost = sftpDetails.get(SFTPConstants.SFTP_REQ_HOST); 58 String ftpPort = sftpDetails.get(SFTPConstants.SFTP_REQ_PORT); 59 String ftpUserName = sftpDetails.get(SFTPConstants.SFTP_REQ_USERNAME); 60 String ftpPassword = sftpDetails.get(SFTPConstants.SFTP_REQ_PASSWORD); 61 62 JSch jsch = new JSch(); // 创建JSch对象 63 session = jsch.getSession(ftpUserName, ftpHost, Integer.parseInt(ftpPort)); // 根据用户名,主机ip,端口获取一个Session对象 64 LOG.debug("Session created."); 65 if (ftpPassword != null) { 66 session.setPassword(ftpPassword); // 设置密码 67 } 68 Properties config = new Properties(); 69 config.put("StrictHostKeyChecking", "no"); 70 session.setConfig(config); // 为Session对象设置properties 71 session.setTimeout(timeout); // 设置timeout时间 72 session.connect(); // 通过Session建立链接 73 LOG.debug("Session connected."); 74 75 LOG.debug("Opening Channel."); 76 channel = session.openChannel("sftp"); // 打开SFTP通道 77 channel.connect(); // 建立SFTP通道的连接 78 LOG.debug("Connected successfully to ftpHost = " + ftpHost 79 + ",as ftpUserName = " + ftpUserName + ", returning: " 80 + channel); 81 return (ChannelSftp) channel; 82 } 83 84 /** 85 * 关闭连接 86 *@throws Exception 87 *@author Edi_Kai 88 *@date 2015年7月3日 下午5:27:02 89 *@comment 90 */ 91 public void closeChannel() throws Exception { 92 if (channel != null) { 93 channel.disconnect(); 94 } 95 if (session != null) { 96 session.disconnect(); 97 } 98 } 99 100 /**101 * 查看服务器上是否存在该目录,如果不存在则创建102 *@param dir103 *@param channelSftp104 *@author Edi_Kai105 *@date 2015年7月3日 下午5:07:25106 *@comment107 */108 public void createDir(String dir, ChannelSftp channelSftp) {109 String parDir = dir.substring(0, dir.lastIndexOf("/"));110 try {111 Vector content = channelSftp.ls(dir);112 113 if (content == null) {114 createDir(parDir, channelSftp);115 if (dir.indexOf(".")<0) {116 channelSftp.mkdir(dir);117 }118 }119 } catch (SftpException e) {120 try {121 createDir(parDir, channelSftp);//如果报异常,则说明dir路径不存在,则创建该路径122 if (dir.indexOf(".")<0) {123 channelSftp.mkdir(dir);124 }125 } catch (SftpException e1) {126 e1.printStackTrace();127 }128 }129 }130 }
该类中用到了一个存放常量参数的配置类,SFTPConstants.java,代码如下
package fileUtil;import java.util.HashMap;import java.util.Map;/** * @包名 util.sftp * @文件名 SFTPConstants.java * @作者 Edi_Kai * @创建日期 2015年7月3日 * @版本 V 1.0 * @描述 */public class SFTPConstants { public static final String SFTP_REQ_HOST = "host"; public static final String SFTP_REQ_PORT = "port"; public static final String SFTP_REQ_USERNAME = "username"; public static final String SFTP_REQ_PASSWORD = "password"; /** * 获取Linux服务器 登录信息 *@return *@author Edi_Kai *@date 2015年7月3日 下午5:23:37 *@comment */ public static MapgetConfig() { Map cfg = new HashMap (); cfg.put(SFTP_REQ_HOST, FileUtil.getPropValue("sshServerHost"));//192.168.1.110 cfg.put(SFTP_REQ_PORT, FileUtil.getPropValue("sshServerPort"));//22 cfg.put(SFTP_REQ_USERNAME, FileUtil.getPropValue("sshServerUN")); cfg.put(SFTP_REQ_PASSWORD, FileUtil.getPropValue("sshServerPwd")); return cfg; }}
B)、上传文件到服务器
/** * 将本服务器上的文件上传到SSH服务器的指定路径下 *@param src 本地服务器文件路径 *@param dst SSH服务器路径 *@return *@author Edi_Kai *@date 2015年7月6日 上午11:58:30 *@comment */ public static boolean upFile2SSHServer(String src, String dst) { boolean bl = false; SFTPChannelUtil util = SFTPChannelUtil.getSftpChannelUtil(); try { ChannelSftp chanSftp = util.getChannel(SFTPConstants.getConfig(), 10000); Listlist = ; for (int i = 0; i < list.size(); i++) { String path = list.get(i).getPath(); path = path.replaceAll("\\\\", "/");// E:/ad4/css/ad.css if (path.indexOf(":")>-1) { path = path.split(":")[1].substring(1);// ad4/css/ad.css } util.createDir(dst, chanSftp); chanSftp.put(list.get(i).getPath(), serverPath); } bl = true; } catch (JSchException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); }finally{ try { util.closeChannel(); } catch (Exception e) { e.printStackTrace(); } } return bl; }
如有遗漏,继续追加....
/**************************************************************/
每天多学一点....
/**************************************************************/