标签:本机 地方 mon 通过 如何获取 工作 项目 substring 设置
目前呆的项目组主要是维护工作,因为项目比较老,很多文件需要一个个替换,有新产品上就经常要这样替换,很烦,就抽空写了个用于替换修改的文件,当然还有不足之处,最后会提下。
package com.test;
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;
import com.jcraft.jsch.SftpProgressMonitor;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.Properties;
public class SftpUtil {
private ChannelSftp channelSftp;
// private ChannelExec channelExec;
private Session session=null;
private int timeout=60000;
public SftpUtil(SshConfiguration conf) throws JSchException {
System.out.println("try connect to "+conf.getHost()+",username: "+conf.getUserName()+",password: "+conf.getPassword()+",port: "+conf.getPort());
JSch jSch=new JSch(); //创建JSch对象
session=jSch.getSession(conf.getUserName(), conf.getHost(), conf.getPort());//根据用户名,主机ip和端口获取一个Session对象
session.setPassword(conf.getPassword()); //设置密码
Properties config=new Properties();
config.put("StrictHostKeyChecking", "no");
session.setConfig(config);//为Session对象设置properties
session.setTimeout(timeout);//设置超时
session.connect();//通过Session建立连接
}
public void download(String src,String dst) throws JSchException, SftpException{
//src linux服务器文件地址,dst 本地存放地址
channelSftp=(ChannelSftp) session.openChannel("sftp");
channelSftp.connect();
channelSftp.get(src, dst);
channelSftp.quit();
}
public void upLoad(String src,String dst) throws JSchException,SftpException{
//src 本机文件地址。 dst 远程文件地址
channelSftp=(ChannelSftp) session.openChannel("sftp");
channelSftp.connect();
channelSftp.put(src, dst);
System.out.println("upload file success!");
channelSftp.quit();
}
public void close(){
session.disconnect();
}
public static void main(String[] args) throws IOException {
/**
* *********上传准备文件***************
*/
SshConfiguration configuration=new SshConfiguration();
configuration.setHost("你的ip地址");
configuration.setUserName("你的连接用户名");
configuration.setPassword("你的连接密码");
configuration.setPort(22);//端口一般都是22
File file = new File("E:\\uploadFile\\upload.txt");//需要上传的文件存放于txt里后面按行读取
BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
String srcinput = null;
try {
while ((srcinput = bufferedReader.readLine()) != null) {//按行读取
SFTPUtils sftp=new SFTPUtils(configuration);
String[] strs = srcinput.split("\\.");
String type = strs[strs.length - 1];
System.out.println("type:" + type);
// 判断文件是class还是jsp或js
String dst1 = "你的应用部分路径";//后面会根据读入的做String的一些处理后拼接成上传的完整位置
if ("class".equals(type)) {
String src = srcinput.replace("\\", "\\\\");// 本地上传文件路径
System.out.println("src:" + src);
String[] strs1 = srcinput.split("\\\\");
if ("某项目1".equals(strs1[3])) {// 属于某项目1目录下
StringBuffer sb = new StringBuffer(dst1);
sb.append("某项目1/");
String last = srcinput.substring(srcinput
.indexOf("WEB-INF"));
String last1 = last.replace("\\", "/");
String[] last1str = last1.split("/");
String str2 = last1str[last1str.length - 1];
String str3 = last1.substring(0, last1.indexOf(str2) - 1);
sb.append(str3);
String dst = sb.toString();
System.out.println("dst:" + dst);
sftp.upLoad(src, dst);
}
if ("某项目2".equals(strs1[3])) {// 属于某项目2目录下
StringBuffer sb = new StringBuffer(dst1);
sb.append("某项目2/");
String last = srcinput.substring(srcinput
.indexOf("WEB-INF"));
String last1 = last.replace("\\", "/");
String[] last1str = last1.split("/");
String str2 = last1str[last1str.length - 1];
String str3 = last1.substring(0, last1.indexOf(str2) - 1);
sb.append(str3);
String dst = sb.toString();
System.out.println("dst:" + dst);
sftp.upLoad(src, dst);
}
if ("某项目3".equals(strs1[3])) {// 属于某项目3目录下
StringBuffer sb = new StringBuffer(dst1);
sb.append("某项目3/");
String last = srcinput.substring(srcinput
.indexOf("WEB-INF"));
String last1 = last.replace("\\", "/");
String[] last1str = last1.split("/");
String str2 = last1str[last1str.length - 1];
String str3 = last1.substring(0, last1.indexOf(str2) - 1);
sb.append(str3);
String dst = sb.toString();
System.out.println("dst:" + dst);
sftp.upLoad(src, dst);
}
}
if ("jsp".equals(type) || "js".equals(type)) {// 该项目jsp和js放一起,一起判断且只在某项目1下
String src = srcinput.replace("\\", "\\\\");// 本地上传文件路径
System.out.println("src:" + src);
String[] strs1 = srcinput.split("\\\\");
if ("某项目1".equals(strs1[3])) {// 属于某项目1目录下
StringBuffer sb = new StringBuffer(dst1);
sb.append("某项目1/");
String last = srcinput.substring(srcinput.indexOf("view"));
String last1 = last.replace("\\", "/");
String[] last1str = last1.split("/");
String str2 = last1str[last1str.length - 1];
String str3 = last1.substring(0, last1.indexOf(str2) - 1);
sb.append(str3);
String dst = sb.toString();
System.out.println("dst:" + dst);
sftp.upLoad(src, dst);
}
}
}
} catch (Exception e) {
e.printStackTrace();
}finally{
bufferedReader.close();
}
}
}
这种比较定制化,因为每个项目统一的格式不一样,有些js等静态文件喜欢放static或者直接建个js文件目录,所以老项目就各自根据自己的项目定制化下吧。。一劳永逸哈哈哈,当然原本是想自己修改了什么文件就自动捕获上传,但是还不清楚如何获取自己修改的文件所以没有实现,就用了在txt里写文件全路径的方式按行读取逐个上传的办法,,也还有很多地方可以完善,如果有大佬知道怎么获取文件被自己修改,请说下~
标签:本机 地方 mon 通过 如何获取 工作 项目 substring 设置
原文地址:https://www.cnblogs.com/codecola/p/11057291.html