From 9829ac67b333fcad7821e3bc51fbfa33c58db5c9 Mon Sep 17 00:00:00 2001 From: lishipeng <1572427111@qq.com> Date: Thu, 1 Dec 2022 20:24:02 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AC=AC=E4=BA=94=E6=AC=A1=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ftpdemo/controller/SSHRemoteCall.java | 42 +++++--------- .../ftpdemo/service/impl/MethodImpl.java | 58 ++++++++++++++----- .../ftpdemo/task/IdentificationUpTask.java | 2 +- .../springblade/ftpdemo/task/TestTask.java | 22 +++---- 4 files changed, 71 insertions(+), 53 deletions(-) diff --git a/src/main/java/org/springblade/ftpdemo/controller/SSHRemoteCall.java b/src/main/java/org/springblade/ftpdemo/controller/SSHRemoteCall.java index 476a6ca..f50034f 100644 --- a/src/main/java/org/springblade/ftpdemo/controller/SSHRemoteCall.java +++ b/src/main/java/org/springblade/ftpdemo/controller/SSHRemoteCall.java @@ -1,12 +1,10 @@ package org.springblade.ftpdemo.controller; import com.jcraft.jsch.*; +import org.springblade.ftpdemo.util.Constant; import java.io.*; -import java.util.HashMap; -import java.util.Iterator; -import java.util.Map; -import java.util.Vector; +import java.util.*; public class SSHRemoteCall { @@ -84,7 +82,7 @@ public class SSHRemoteCall { JSch jSch = new JSch(); try { // 获取到jSch的session, 根据用户名、主机ip、端口号获取一个Session对象 - session = jSch.getSession(userName, ipAddress, 22); //012 + session = jSch.getSession(userName, ipAddress, 22102); //22102 // 设置密码 session.setPassword(password); @@ -201,7 +199,7 @@ public class SSHRemoteCall { // 打开channelSftp ChannelSftp channelSftp = (ChannelSftp) session.openChannel("sftp"); // 远程连接 - channelSftp.connect(); + channelSftp.connect(6000); // 创建一个文件名称问uploadFile的文件 File file = new File(uploadFile); // 将文件进行上传(sftp协议) @@ -269,7 +267,7 @@ public class SSHRemoteCall { try { channelSftp = (ChannelSftp) session.openChannel("sftp"); // 远程连接 - channelSftp.connect(); + channelSftp.connect(6000); // 切换到主目录 // channelSftp.cd("/"); } catch (JSchException e) { @@ -289,12 +287,11 @@ public class SSHRemoteCall { channelSftp.cd(folder); } catch (SftpException ex) { throw new RuntimeException(ex); - } - } } } + channelSftp.disconnect(); } @@ -352,44 +349,37 @@ public class SSHRemoteCall { * @throws SftpException * @throws JSchException */ - public void listFiles(String directory) throws JSchException, SftpException { + public List listFiles(String directory) throws JSchException, SftpException { ChannelSftp channelSftp = (ChannelSftp) session.openChannel("sftp"); // 远程连接 channelSftp.connect(); // 显示目录信息 Vector ls = channelSftp.ls(directory); - Iterator iterator = ls.iterator(); - Map fileMap = new HashMap<>(); + Iterator iterator = ls.iterator(); try { - + ArrayList list = new ArrayList<>(); while (iterator.hasNext()) { ChannelSftp.LsEntry file = (ChannelSftp.LsEntry) iterator.next(); //文件名称 String fileName = file.getFilename(); - System.out.println(fileName); - //todo 这里可使用if或正则不下载一些文件 -// InputStream inputStream = channelSftp.get(directory + fileName); -// if (inputStream != null) { -// File newFile = new File(fileName); -// //将InputStream转File -//// FileUtils.copyToFile(inputStream, newFile); -// fileMap.put(fileName, newFile); -// } + //移除上级目录和根目录:"." ".." + if (".".equals(fileName) || "..".equals(fileName)) { + continue; + } + list.add(fileName); } - + return list; } catch (Exception e) { e.printStackTrace(); } finally { // 切断连接 channelSftp.exit(); } - + return null; } - - } diff --git a/src/main/java/org/springblade/ftpdemo/service/impl/MethodImpl.java b/src/main/java/org/springblade/ftpdemo/service/impl/MethodImpl.java index 0bb79df..c7c9f45 100644 --- a/src/main/java/org/springblade/ftpdemo/service/impl/MethodImpl.java +++ b/src/main/java/org/springblade/ftpdemo/service/impl/MethodImpl.java @@ -19,8 +19,7 @@ import org.springblade.ftpdemo.util.Encrypt; import org.springframework.stereotype.Service; import java.io.*; -import java.util.Date; -import java.util.List; +import java.util.*; import java.util.zip.GZIPInputStream; /** @@ -67,15 +66,14 @@ public class MethodImpl implements Method { // 远程连接服务器 SSHRemoteCall.getInstance().sshRemoteCallLogin(Constant.ipAddress, Constant.userName, Constant.password); - // 确保目录一定存在 SSHRemoteCall.getInstance().directory(upSrc); // 上传文件到指定目录 // SSHRemoteCall.getInstance().uploadFile("/data1/qingniao/" + upSrc + "/" + fileName, src); SSHRemoteCall.getInstance().uploadFile("/data1/qingniao/" + upSrc + "/" + fileName, src); - // 关闭连接 - SSHRemoteCall.getInstance().closeSession(); +// // 关闭连接 +// SSHRemoteCall.getInstance().closeSession(); } @@ -280,15 +278,16 @@ public class MethodImpl implements Method { // 连接远程服务器,日志存放地 Date date = DateUtil.minusDays(new Date(), 1); String yesterday = DateUtil.formatDate(date); - List allFile = Decrypt.getAllFile("/opt/" + yesterday); +// SSHRemoteCall.getInstance().sshRemoteCallLogin(Constant.host, Constant.user,Constant.password1); + String directoryPath = "/opt/" + yesterday; + List allFile = listFiles(directoryPath,sftp); + if (Func.isEmpty(allFile)){ return; } - for (File file : allFile) { - System.out.println("成功进入"); - String filePath = file.getName(); + for (String filePath : allFile) { // 读取远程服务器上的日志文件 gz压缩格式 - GZIPInputStream gzipInputStream = new GZIPInputStream(sftp.get(filePath)); + GZIPInputStream gzipInputStream = new GZIPInputStream(sftp.get(directoryPath+"/"+filePath)); Reader decoder = new InputStreamReader(gzipInputStream, "UTF-8"); BufferedReader reader = new BufferedReader(decoder); // 创建输出流 @@ -340,11 +339,10 @@ public class MethodImpl implements Method { } - - - + System.out.println("w完成"); sftp.disconnect(); session.disconnect(); +// SSHRemoteCall.getInstance().closeSession(); } @@ -378,4 +376,38 @@ public class MethodImpl implements Method { return null; } + + /** + * 列出目录下的文件 + * + * @param directory 要列出的目录 + * @return + * @throws SftpException + * @throws JSchException + */ + private List listFiles(String directory,ChannelSftp channelSftp) throws JSchException, SftpException { + // 显示目录信息 + Vector ls = channelSftp.ls(directory); + + + Iterator iterator = ls.iterator(); + + try { + ArrayList list = new ArrayList<>(); + while (iterator.hasNext()) { + ChannelSftp.LsEntry file = (ChannelSftp.LsEntry) iterator.next(); + //文件名称 + String fileName = file.getFilename(); + //移除上级目录和根目录:"." ".." + if (".".equals(fileName) || "..".equals(fileName)) { + continue; + } + list.add(fileName); + } + return list; + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } } diff --git a/src/main/java/org/springblade/ftpdemo/task/IdentificationUpTask.java b/src/main/java/org/springblade/ftpdemo/task/IdentificationUpTask.java index 06df4ae..48d7a6b 100644 --- a/src/main/java/org/springblade/ftpdemo/task/IdentificationUpTask.java +++ b/src/main/java/org/springblade/ftpdemo/task/IdentificationUpTask.java @@ -24,7 +24,7 @@ public class IdentificationUpTask { private final NbmsEntApplyServcie nbmsEntApplyServcie; private final Method method; - @Scheduled(cron = "0 1/10 * * * ?") + @Scheduled(cron = "0/20 * * * * ? ") public void refreshAliDeviceStatus() { // 标识解析企业主体信息上报检测新增并上传 threePackMethod(0); diff --git a/src/main/java/org/springblade/ftpdemo/task/TestTask.java b/src/main/java/org/springblade/ftpdemo/task/TestTask.java index 49baf84..cdc99db 100644 --- a/src/main/java/org/springblade/ftpdemo/task/TestTask.java +++ b/src/main/java/org/springblade/ftpdemo/task/TestTask.java @@ -10,6 +10,7 @@ import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import org.springframework.util.StopWatch; +import java.util.List; import java.util.Vector; /** @@ -22,21 +23,16 @@ import java.util.Vector; public class TestTask { private final Method method; - @Scheduled(cron = "0 0/1 * * * ?") +// @Scheduled(cron = "0/8 * * * * ? ") public void refreshAliDeviceStatus() throws Exception { -// StopWatch stopWatch = new StopWatch("读取表6日志,生成加密文件,上传" ); -// stopWatch.start(); -// String yyyyMMdd = DateUtil.format(DateUtil.now(), "yyyyMMdd"); -// -// method.creatSixUpFileAndUp(yyyyMMdd, "1"); -// stopWatch.stop(); -// double seconds = stopWatch.getTotalTimeSeconds(); -// System.out.println("完成,花费:"+seconds); + StopWatch stopWatch = new StopWatch("读取表6日志,生成加密文件,上传" ); + stopWatch.start(); + String yyyyMMdd = DateUtil.format(DateUtil.now(), "yyyyMMdd"); - - // 1、首先远程连接ssh - SSHRemoteCall.getInstance().sshRemoteCallLogin(Constant.host, Constant.user,Constant.password1); - SSHRemoteCall.getInstance().listFiles("/opt/2022-11-30"); + method.creatSixUpFileAndUp(yyyyMMdd, "1"); + stopWatch.stop(); + double seconds = stopWatch.getTotalTimeSeconds(); + System.out.println("完成,花费:"+seconds); } }