博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java常用文件操作-2
阅读量:5996 次
发布时间:2019-06-20

本文共 8479 字,大约阅读时间需要 28 分钟。

  上篇文章记录了常用的文件操作,这里记录下通过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             Vector
v = 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     List
list = 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 Map
getConfig() { 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);            List
list = ; 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; }

 

 如有遗漏,继续追加....

/**************************************************************/

  每天多学一点....

/**************************************************************/

转载于:https://www.cnblogs.com/edi-kai/p/4702636.html

你可能感兴趣的文章
分析javascript关闭
查看>>
(剑指Offer)面试题60:把二叉树打印成多行
查看>>
Android开源项目分享
查看>>
蓝牙4.0BLE cc2540 cc2541 ios OAD课程(空中固件升级)[原版的,多图]
查看>>
atitit.js javascript 调用c# java php后台语言api html5交互的原理与总结p97
查看>>
Axis2 转让Webservice 介面
查看>>
VB.NET与C# 语法show差异
查看>>
Android学习简单总结
查看>>
恩布拉科业务IM 1.8 版本号,内部沟通软件
查看>>
android strings.xml 报 is not translated in af,
查看>>
JQuery学习(2)之Ajax
查看>>
四种DLL:NON-MFC DLL, Regular DLL Statically/Dynamically Linked to MFC, MFC Extension DLL
查看>>
Android多线程的研究(8)——Java5于Futrue获取线程返回结果
查看>>
Android 菜单(OptionMenu)大全 建立你自己的菜单
查看>>
关于appStore评分的相关说明--转自张诚教授
查看>>
微信公众账号开发入门
查看>>
Linux中查看GNOME版本号
查看>>
《Programming WPF》翻译 第7章 1.图形基础
查看>>
android106 C基本数据类型
查看>>
特征选择常用算法综述
查看>>