热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java获取sftp某路径下的所有zip文件并获得zip文件内容

需求:需要获得某个sftp上的某些增量的zip文件,并将zip文件中的txt中的内容保存到数据库。txt中文件的内容是以|隔开。zip文件每天新增

需求:

需要获得某个sftp上的某些增量的zip文件,并将zip文件中的txt中的内容保存到数据库。

txt中文件的内容是以 |  隔开。

zip文件每天新增一个,以前保存到数据库的zip中的数据不能重复保存。

package com.tmnch.tmnchpinan.ftpUtil;import com.jcraft.jsch.*;
import com.tmnch.tmnchpinan.entity.policyCount;
import com.tmnch.tmnchpinan.entity.sftpNameHistoryList;
import com.tmnch.tmnchpinan.ftpUtil.ftpConstant.constant;
import com.tmnch.tmnchpinan.service.FtpService;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.*;
import java.util.zip.*;/***  * Description:* 获取sftp某个路径下的所有zip文件 并获得每个zip文件中的内容*  **  * @author thw*  * @date 2020/9/23 15:15*  */@Configuration
@EnableScheduling
public class ftpServices {private static Session sshSession;@Autowiredprivate FtpService ftpService;//首先批量跑历史的zip文件
/*@Test
*/@Scheduled(cron = "0/25 * * * * ?")//定时public void runHistoryZip() {ZipEntry zipEntry = null;String historyZip = "";historyZip = getHistoryZipName(historyZip); //取出历史已经写入的zip文件try {ChannelSftp sftp = sftpConnection(constant.ftp_host, constant.ftp_port, constant.ftp_userNmae, constant.ftp_password);Vector v = sftp.ls(constant.ftpPath); //路径下所有文件if (v.size() > 0) {Iterator it = v.iterator();while (it.hasNext()) { //遍历某路径下的所有文件ChannelSftp.LsEntry entry = (ChannelSftp.LsEntry) it.next();String fileNameZip = entry.getFilename();//路径下某个文件名称名称if (fileNameZip.contains(constant.fileType)) {//获取所有zip文件对象System.out.println(fileNameZip);/*** 该处需要做特殊处理,去除掉以前曾经已经跑过的zip文件*/if (historyZip.length() > 0) {if (historyZip.contains(fileNameZip)) {continue;}}InputStream in = sftp.get(constant.ftpPath + fileNameZip);//获取文件内容ZipInputStream zin = new ZipInputStream(in);while ((zipEntry = zin.getNextEntry()) != null) {//遍历该zip文件内容String line = "";String fileNmae = null;String[] fileNmaeLIst = null;String tableNmae = null;BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(zin, "UTF-8"));while ((line = bufferedReader.readLine()) != null) {//读取该zip内文件的内容fileNmae = zipEntry.getName();//;路径名称fileNmaeLIst = fileNmae.split(constant.speatorTable);tableNmae = fileNmaeLIst[2];String[] sort = null;switch (tableNmae) {case "ProDclause":sort = line.split(constant.speator);System.out.println(sort[4]);continue;case "ProDClauseKind":sort = line.split(constant.speator);System.out.println(sort[5]);continue;}}}//特殊处理,保存过得zip需要将文件名存入记录表ftpService.insrtGistoryZip(fileNameZip);in.close();}}}sftpClose(sftp);sessionClose();} catch (Exception e) {e.printStackTrace();}//用于保存数据
/*List result =ftpService.getFtpTest("R51130600005");
*/}/*** @param host* @param password* @param port* @param userName* @return 连接对象* @description连接sftp**/public static ChannelSftp sftpConnection(String host, int port, String userName, String password) throws Exception {JSch jsch = new JSch();ChannelSftp channelSftp;jsch.getSession(userName, host, port);sshSession = jsch.getSession(userName, host, port);sshSession.setPassword(password);Properties properties = new Properties();properties.put("StrictHostKeyChecking", "no");sshSession.setConfig(properties);sshSession.connect();Channel channel = sshSession.openChannel("sftp");channel.connect();channelSftp = (ChannelSftp) channel;return channelSftp;}/*** @param* @return* @description 退出Sftp服务器登录**/public static void sftpClose(ChannelSftp channelSftp) {if (channelSftp != null) {if (channelSftp.isConnected()) {channelSftp.disconnect();}}}/*** 关闭session*/public static void sessionClose() {if (sshSession != null) {if (sshSession.isConnected()) {sshSession.disconnect();sshSession = null;}}}/*** 列出目录下的文件** @param directory:要列出的目录* @param sftp* @return* @throws SftpException*/public Vector listFiles(String directory, ChannelSftp sftp) throws SftpException {return sftp.ls(directory);}public String getHistoryZipName(String historyZip) {List sftpNameHistoryList = ftpService.selectZiphistory(historyZip);if (sftpNameHistoryList.size() > 0) {for (sftpNameHistoryList sftp : sftpNameHistoryList) {historyZip = historyZip + constant.speatorTable + sftp.getName();}}return historyZip;}
}

constant.java 

//生产需要修改public static final String ftpPath = "/bin/";//文件路径public static final String ftp_host = "192.1.1.1";public static final int ftp_port = 22;public static final String ftp_userNmae = "root";public static final String ftp_password = "root";public static final String speator = "[|]";//文件内容隔离方式public static final String speatorTable = "/";//文件名隔离方式public static final String fileType = ".zip";//文件格式//1.000040\Acc\ProCInsureAcc


推荐阅读
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 本文介绍了如何使用C#制作Java+Mysql+Tomcat环境安装程序,实现一键式安装。通过将JDK、Mysql、Tomcat三者制作成一个安装包,解决了客户在安装软件时的复杂配置和繁琐问题,便于管理软件版本和系统集成。具体步骤包括配置JDK环境变量和安装Mysql服务,其中使用了MySQL Server 5.5社区版和my.ini文件。安装方法为通过命令行将目录转到mysql的bin目录下,执行mysqld --install MySQL5命令。 ... [详细]
  • 第四章高阶函数(参数传递、高阶函数、lambda表达式)(python进阶)的讲解和应用
    本文主要讲解了第四章高阶函数(参数传递、高阶函数、lambda表达式)的相关知识,包括函数参数传递机制和赋值机制、引用传递的概念和应用、默认参数的定义和使用等内容。同时介绍了高阶函数和lambda表达式的概念,并给出了一些实例代码进行演示。对于想要进一步提升python编程能力的读者来说,本文将是一个不错的学习资料。 ... [详细]
  • Java程序设计第4周学习总结及注释应用的开发笔记
    本文由编程笔记#小编为大家整理,主要介绍了201521123087《Java程序设计》第4周学习总结相关的知识,包括注释的应用和使用类的注释与方法的注释进行注释的方法,并在Eclipse中查看。摘要内容大约为150字,提供了一定的参考价值。 ... [详细]
  • Week04面向对象设计与继承学习总结及作业要求
    本文总结了Week04面向对象设计与继承的重要知识点,包括对象、类、封装性、静态属性、静态方法、重载、继承和多态等。同时,还介绍了私有构造函数在类外部无法被调用、static不能访问非静态属性以及该类实例可以共享类里的static属性等内容。此外,还提到了作业要求,包括讲述一个在网上商城购物或在班级博客进行学习的故事,并使用Markdown的加粗标记和语句块标记标注关键名词和动词。最后,还提到了参考资料中关于UML类图如何绘制的范例。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • 本文介绍了PhysioNet网站提供的生理信号处理工具箱WFDB Toolbox for Matlab的安装和使用方法。通过下载并添加到Matlab路径中或直接在Matlab中输入相关内容,即可完成安装。该工具箱提供了一系列函数,可以方便地处理生理信号数据。详细的安装和使用方法可以参考本文内容。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 本文讨论了Kotlin中扩展函数的一些惯用用法以及其合理性。作者认为在某些情况下,定义扩展函数没有意义,但官方的编码约定支持这种方式。文章还介绍了在类之外定义扩展函数的具体用法,并讨论了避免使用扩展函数的边缘情况。作者提出了对于扩展函数的合理性的质疑,并给出了自己的反驳。最后,文章强调了在编写Kotlin代码时可以自由地使用扩展函数的重要性。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 突破MIUI14限制,自定义胶囊图标、大图标样式,支持任意APP
    本文介绍了如何突破MIUI14的限制,实现自定义胶囊图标和大图标样式,并支持任意APP。需要一定的动手能力和主题设计师账号权限或者会主题pojie。详细步骤包括应用包名获取、素材制作和封包获取等。 ... [详细]
author-avatar
QFWQF2010_899
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有