代码如下

package weaver.general;;import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.time.LocalDate;
import java.time.LocalTime;
import java.util.concurrent.TimeUnit;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.log4j.PropertyConfigurator;public class ZipCompressThread implements Runnable {Log log=LogFactory.getLog(this.getClass());private String logRootPath;private static final String ECOLOGY = "ecology";private static final String INTEGRATION = "integration";private static final String ECO_PREFFIX = File.separator + "ecology_";private static final String INTERG_PREFFIX = File.separator + "integration_";private static final String INTERG_CATE_PREFFIX = File.separator + "integration";private static final String ZIP_SUFFIX = ".zip";private static final String LOG_SUFFIX = ".log";private static final String LOG = "log";private boolean flag = false;private int hour = 2;private String date = getDate();//给1小时压缩空挡int nextHour = 3;//logRoot:   "C:\\MY_IDEA\\demo_01\\ecology\\log"public ZipCompressThread(String logRoot) {this.logRootPath = logRoot;}@Overridepublic void run() {while (true) {if (LocalTime.now().getHour() == hour) {if (!flag) {flag = true;ecologyZipCompress(logRootPath);integrationCompress(logRootPath + INTERG_CATE_PREFFIX);}try {TimeUnit.MINUTES.sleep(15);} catch (InterruptedException e) {e.printStackTrace();}if (LocalTime.now().getHour() == nextHour) {flag = false;}}}}public void ecologyZipCompress(String logRootPath) {createFilePath(logRootPath);}public void integrationCompress(String interationPath) {createFilePath(interationPath);}private void createFilePath(String catagoryPath) {String filePath = null;File catagory = new File(catagoryPath);File[] fileList = catagory.listFiles();if (catagory.exists()) {for (File file : fileList) {if (file.getName().endsWith(date + LOG_SUFFIX)) {filePath = file.toString();log.info("日志文件目录是:" + filePath);//System.out.println("日志文件目录是:" + filePath);break;}}}createZipAndDeleteLog(filePath, catagoryPath);}private void createZipAndDeleteLog(String filePath, String catagoryPath) {FileInputStream fis = null;FileOutputStream fos = null;ZipOutputStream zos = null;Boolean isZip = false;String target = zipTargetPath(catagoryPath);if (null != filePath) {//targetFile压缩的log日志全路径File targetFile = new File(filePath);try {//目标zip文件(包括路径写入文件输出流)fos = new FileOutputStream(target);//封装进zip输出流zos = new ZipOutputStream(fos);if (targetFile.exists()) {try {//log文件建立输出流fis = new FileInputStream(targetFile);ZipEntry ze = new ZipEntry(targetFile.getName());zos.putNextEntry(ze);byte[] content = new byte[1024];int len;while ((len = fis.read(content)) != -1) {zos.write(content, 0, len);zos.flush();}} catch (IOException e) {log.info(filePath + "日志压缩写入zip文件异常!");//System.out.println(filePath + "日志压缩写入zip文件异常!");} finally {try {if (fis != null) {fis.close();}} catch (IOException e) {log.info(filePath + "日志压缩输入流关闭异常!");//System.out.println(filePath + "日志压缩输入流关闭异常!");}}}} catch (Exception e) {e.printStackTrace();} finally {try {if (zos != null) {zos.close();}} catch (IOException e) {log.info(filePath + "日志压缩输出流关闭异常!");//System.out.println(filePath + "日志压缩输出流关闭异常!");}}File catagory = new File(catagoryPath);File[] flashfileList = catagory.listFiles();for (File file : flashfileList) {if (file.getName().endsWith(date + ZIP_SUFFIX)) {isZip = true;break;}}isDelete(isZip, targetFile);} else {if (filePath == null) {log.info(target + "日志前一天日志已经压缩并删除!");//System.out.println(target + "日志前一天日志已经压缩并删除!");} else {log.info(filePath + "日志前一天日志已经压缩并删除!");//System.out.println(filePath + "日志前一天日志已经压缩并删除!");}}}/*** 设置压缩的目标文件名称*/private String zipTargetPath(String logRoot) {String date = getDate();if (logRoot.endsWith(File.separator + ECOLOGY + File.separator + LOG)) {return logRoot + ECO_PREFFIX + date + ZIP_SUFFIX;} else {return logRoot + INTERG_PREFFIX + date + ZIP_SUFFIX;}}/*** 获取日志20200720** @return*/private String getDate() {return LocalDate.now().minusDays(1).toString().replace("-", "");}private void isDelete(boolean isZip, File targetFile) {if (isZip) {if (LOG.equals(targetFile.getParentFile().getName()) && ECOLOGY.equals(targetFile.getParentFile().getParentFile().getName()) && targetFile.getName().endsWith(LOG_SUFFIX)) {targetFile.delete();log.info(targetFile.getName() + "前一天的日志已经删除!");//System.out.println(targetFile.getName() + "前一天的日志已经删除!");} else if (INTEGRATION.equals(targetFile.getParentFile().getName()) && LOG.equals(targetFile.getParentFile().getParentFile().getName()) && ECOLOGY.equals(targetFile.getParentFile().getParentFile().getParentFile().getName()) && targetFile.getName().endsWith(LOG)) {targetFile.delete();log.info(targetFile.getName() + "前一天的日志已经删除!");//System.out.println(targetFile.getName() + "前一天的日志已经删除!");} else {log.info("该文件夹不是"+ targetFile + ",无法删除对应日志");//System.out.println("该文件夹不是" + targetFile + ",无法删除对应日志");}} else {log.info("未生成日压缩的zip,无法删除对应日志");//System.out.println("未生成日压缩的zip,无法删除对应日志");}}
}

你会去创建一个线程去处理压缩日志并删除吗?相关推荐

  1. Java 创建一个线程的三种方式

    Java 创建一个线程的三种方式 更多内容,点击了解: https://how2j.cn/k/thread/thread-start/353.html 创建多线程有3种方式,分别是继承线程类,实现Ru ...

  2. 多线程系列教材 (一)- Java 创建一个线程的三种方式

    多线程即在同一时间,可以做多件事情. 创建多线程有3种方式,分别是继承线程类,实现Runnable接口,匿名类 步骤1:线程概念 步骤2:创建多线程-继承线程类 步骤3:创建多线程-实现Runnabl ...

  3. 使用Thread类和Runnable方法来创建一个线程的区别

    第一:Thread类需要被继承,然后重写run()方法,但是Java中的类是单继承的,也就是说,若某个类继承Thread获取线程功能后,就不能再继承别的类了.但是Runnable接口解决了这个问题,某 ...

  4. 【java】创建一个线程,可以对其名称进行设置

    创建一个线程,可以对其名称进行设置 package p1;public class Java_2 { public static void main(String[] args){Thread t = ...

  5. 多线程(一):认识和创建一个线程

    认识和创建一个线程 一.进程与线程 1.进程 (1).什么是进程 (2).创建进程 2.线程 3.进程和线程的关系 4.为什么要使用多线程 二.创建一个线程 1.创建线程的方式 (1).继承Threa ...

  6. c#如何使用反射去创建一个委托_【自学C#】|| 笔记 37 创建线程

    一.Thread:线程及与线程有关的类 在 C# 语言中线程(Thread)是包含在进程中的,它位于 System.Threading 命名空间中.     与线程有关的类同样也都在 System.T ...

  7. 教你怎么去创建一个代币!

    想知道更多关于区块链技术知识,请百度[链客区块链技术问答社区]链客,有问必答! 本文从技术角度详细介绍如何基于以太坊ERC20创建代币的流程. 写在前面 本文所讲的代币是使用以太坊智能合约创建,阅读本 ...

  8. 线程安全list_多线程开发之如何创建一个线程安全的类

    上一篇讨论了如何解决线程安全的问题,今天总结如何设计一个线程安全的类: 创建线程安全类的关注点 一个类要想线程安全,除了上一篇文章通过外部解决方式外,还可以通过合理的设计类的内部来解决,使类本身就线程 ...

  9. php每一个请求会创建一个线程吗,实现一个线程池

    一.线程最主要的三个同步机制 1.信号量 2.互斥锁 3.条件变量 二.对三个同步机制分别实现一个包装类#ifdef LOCKER_H #define LOCKER_H #include #inclu ...

最新文章

  1. 优达学城《DeepLearning》2-4:自编码器(无监督学习算法)
  2. 旅行家的预算[贪心]
  3. 判断手势_手势密码有几种?
  4. 单元测试之JUnit 5 参数化测试使用手册
  5. MYSQL MVCC实现及其机制
  6. yii---where or该如何使用
  7. 因为未启用行移动功能 不能闪回表
  8. Java dectobin(n)函数_浙大JAVA实验题答案09answer.docx
  9. Kubernetes详解(十五)——Pod对象创建过程
  10. PowerMock简单使用
  11. Windows 上好用的7款下载工具
  12. 2019版PHP自动发卡平台源码
  13. 【新手基础教程】maix asr(自动语音识别)
  14. OSX 安装配置Maven
  15. 服务器后台运行程序(nohup/screen/tmux)
  16. Word自动给图片编号
  17. psql屏幕输出全部结果_液晶电视无法开机,是电源板问题还是屏幕问题,自己动手维修...
  18. 点云公开数据集:Semantic3D
  19. 动态规划-最少硬币组合问题(Java)
  20. revit模型怎么在手机上看_模型的查看和定位-Revit基础教程

热门文章

  1. “智能”基石:人工智能数据标注与训练,是决定智能时代的第一步
  2. 11.11大促来袭,京东如何保障云安全?
  3. Kaggle金牌得主的Python数据挖掘框架,机器学习基本流程都讲清楚了
  4. 万字长文综述目标检测领域,你要的都在这里
  5. 从样本处理到决策模型,如何用NLP识别盗版资源?
  6. Python中的元编程:一个关于修饰器和元类的简单教程
  7. 为什么华为200万招聘AI博士,马斯克却推出脑机接口对抗AI?
  8. 【码书】一本经典且内容全面算法书籍,学算法必备
  9. AI一分钟 | 教育部公布高中新课标,编程、算法思维成必修内容;李彦宏否认百度会“All in AI”
  10. AI一分钟 | 美女机器人竟然想生孩子,太可怕了!比尔·盖茨当选中国工程院外籍院士