1. 程式人生 > >spring boot +commons-io實現檔案監控

spring boot +commons-io實現檔案監控

1、pom檔案

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>cn.sun</groupId>
    <artifactId>cui-monitor</artifactId>
    <version>1.0-SNAPSHOT</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.2.7.RELEASE</version>
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.6</version>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.16</version>
        </dependency>
    </dependencies>

</project>
2、FileListener 
package cn.sunline.Listener;

import org.apache.commons.io.monitor.FileAlterationListenerAdaptor;
import org.apache.commons.io.monitor.FileAlterationObserver;
import org.apache.log4j.Logger;

import java.io.*;

/**
 * Created by Rick on 2017/12/18.
 *
 * 檔案變化監聽器
 *
 * 在Apache的Commons-IO中有關於檔案的監控功能的程式碼. 檔案監控的原理如下:
 * 由檔案監控類FileAlterationMonitor中的執行緒不停的掃描檔案觀察器FileAlterationObserver,
 * 如果有檔案的變化,則根據相關的檔案比較器,判斷檔案時新增,還是刪除,還是更改。(預設為1000毫秒執行一次掃描)
 *
 *
 */
public class FileListener extends FileAlterationListenerAdaptor {
    private Logger log = Logger.getLogger(FileListener.class);
    /**
     * 檔案建立執行
     */
    public void onFileCreate(File file) {
        log.info("[新建]:" + file.getAbsolutePath());
    }

    /**
     * 檔案建立修改
     */
    public void onFileChange(File file) {
        log.info("[修改]:" + file.getAbsolutePath());
        BufferedReader buf = null;
        try {
            buf = new BufferedReader(new InputStreamReader(new FileInputStream(file),"GBK"));
            BufferedReader br = new BufferedReader(buf);
            String line = null;
            System.out.println(br.readLine());
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 這裡釋放系統 IO 資源
            try {if (buf != null){buf.close();}}catch (Exception e){}
        }
    }

    /**
     * 檔案刪除
     */
    public void onFileDelete(File file) {
        log.info("[刪除]:" + file.getAbsolutePath());
    }

    /**
     * 目錄建立
     */
    public void onDirectoryCreate(File directory) {
        log.info("[新建]:" + directory.getAbsolutePath());
    }

    /**
     * 目錄修改
     */
    public void onDirectoryChange(File directory) {
        log.info("[修改]:" + directory.getAbsolutePath());
    }

    /**
     * 目錄刪除
     */
    public void onDirectoryDelete(File directory) {
        log.info("[刪除]:" + directory.getAbsolutePath());
    }

    public void onStart(FileAlterationObserver observer) {
        // TODO Auto-generated method stub
        super.onStart(observer);
    }

    public void onStop(FileAlterationObserver observer) {
        // TODO Auto-generated method stub
        super.onStop(observer);
    }
}

3、啟動類
package cn.sunline;

import cn.sunline.Listener.FileListener;
import cn.sunline.controller.SampleController;
import org.apache.commons.io.filefilter.FileFilterUtils;
import org.apache.commons.io.filefilter.HiddenFileFilter;
import org.apache.commons.io.filefilter.IOFileFilter;
import org.apache.commons.io.monitor.FileAlterationListenerAdaptor;
import org.apache.commons.io.monitor.FileAlterationMonitor;
import org.apache.commons.io.monitor.FileAlterationObserver;
import org.apache.log4j.Logger;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.io.*;
import java.util.concurrent.TimeUnit;

/**
 * Created by Rick on 2017/12/18. 自定義監控器
 */
@EnableAutoConfiguration
public class AppServer
{
    final  static Logger logger = Logger.getLogger(AppServer.class);
    public static void main(String[] args) throws Exception {
        SpringApplication.run(AppServer.class, args);
        System.out.println("*********************************啟動成功*********************************");
        // 監控目錄
        String rootDir = "D:\\test";
        // 輪詢間隔 5 秒
        long interval = TimeUnit.SECONDS.toMillis(1);
        // 建立過濾器
        IOFileFilter directories = FileFilterUtils.and(
                FileFilterUtils.directoryFileFilter(),
                HiddenFileFilter.VISIBLE);
        IOFileFilter files       = FileFilterUtils.and(
                FileFilterUtils.fileFileFilter(),
                FileFilterUtils.suffixFileFilter(".txt"));
        IOFileFilter filter = FileFilterUtils.or(directories, files);
        // 使用過濾器
        FileAlterationObserver observer = new FileAlterationObserver(new File(rootDir), filter);
        
        //FileAlterationObserver observer = new FileAlterationObserver(new File(rootDir));
        observer.addListener(new FileListener());
        //建立檔案變化監聽器
        FileAlterationMonitor monitor = new FileAlterationMonitor(interval, observer);
        // 開始監控
        try{
            monitor.start();
            System.out.println("***************監控中***************");
        }
        catch (Exception e){
            logger.error("異常處理",e);
        }
    }
}

4、執行效果

相關推薦

spring boot +commons-io實現檔案監控

1、pom檔案 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://ww

使用ajax,Jquery,Spring Boot,MultipartFile實現檔案上傳功能

MultipartFile 方法總結  byte[] getBytes()  返回檔案的內容作為一個位元組陣列。  String getContentType()&nbs

工具類commons-io檔案監控

一、前言: 使用Commons-io的monitor下的相關類可以處理對檔案進行監控,它採用的是觀察者模式來實現的 1、可以監控資料夾的建立、刪除和修改 2、可以監控檔案的建立、刪除和修改 3、採用的是觀察者模式來實現的 4、採用執行緒去定時去刷現檢測檔案的變化情況 二、程

spring-boot-admin原始碼分析及單機監控spring-boot-monitor的實現(三)

SpringBootMonitor spring-boot-admin原始碼分析及單機監控spring-boot-monitor的實現(一) spring-boot-admin原始碼分析及單機監控spring-boot-monitor的實現(二)

spring-boot-admin原始碼分析及單機監控spring-boot-monitor的實現(二)

SpringBootMonitor spring-boot-admin原始碼分析及單機監控spring-boot-monitor的實現(一) spring-boot-admin原始碼分析及單機監控spring-boot-monitor的實現(二)

spring-boot-admin原始碼分析及單機監控spring-boot-monitor的實現(一)

SpringBootMonitor spring-boot-admin原始碼分析及單機監控spring-boot-monitor的實現(一) spring-boot-admin原始碼分析及單機監控spring-boot-monitor的實現(二) spring-boot-ad

Spring Boot整合Druid實現資料來源管理與監控

1. 引言 在程式設計師的日常工作中, 經常需要編寫資料庫操作相關的程式,而這就需要資料連線池中介軟體用於管理資料庫連線。資料庫連線池負責分配、管理和釋放資料庫連線,它允許應用程式重複使用一個現有的資料庫連線,而不是再重新建立一個;釋放空閒時間超過最大空閒時間

Spring boot——helloworld例子實現

and eba -exec odin url 工程目錄 cnblogs per simple 軟件152 緱旭浩 1.新建maven項目,package方式為war. 使用maven的時候,maven會從倉庫中下載依賴的jar包。 新建Maven Pr

Spring-boot和kafka實現消息發送器

pla res 實現 sage 發送 temp warn pre autowire 1,配置kafakaproducer和consummer。 2,發送消息通過回調的方式處理發送成功或者失敗。 public class Sender { Logger log =

spring-boot-starter-actuator(健康監控)配置和使用

frame maven git 追蹤 包括 屬性 per dump zookeepe 在生產環境中,需要實時或定期監控服務的可用性。Spring Boot的actuator(健康監控)功能提供了很多監控所需的接口,可以對應用系統進行配置查看、相關功能統計等。 集成:

spring boot 利用redisson實現redis的分布式鎖

代碼 sched 技術 商品 onf 定義 必須 配置線 oracle 原文:http://liaoke0123.iteye.com/blog/2375469 利用redis實現分布式鎖,網上搜索的大部分是使用java jedis實現的。 redis官方推薦的分布式

Spring Boot使用@Async實現異步調用:自定義線程池

tor color HR cal ace 核心 異步 cond cor    前面的章節中,我們介紹了使用@Async註解來實現異步調用,但是,對於這些異步執行的控制是我們保障自身應用健康的基本技能。本文我們就來學習一下,如果通過自定義線程池的方式來控制異步調用的並發。 定

Spring Boot + MyBatis + Thymeleaf實現簡單留言板應用

crud pro 點擊 htm drop lang data cati col Spring Boot + MyBatis + Thymeleaf實現簡單留言板應用 本項目主要介紹使用Spring Boot + MyBatis + Thymeleaf + Bootstrap

Spring Boot使用AOP實現攔截某個方法

ces 文件 commit ransac dex red code join info 1、引入.jarl文件依賴 <!-- Spring Boot Web 依賴 --> <dependency>

Spring boot 配置https 實現java通過https介面訪問

      近來公司需要搭建一個https的伺服器來除錯介面(伺服器用的spring boot框架),剛開始接觸就是一頓百度,最後發現網際網路認可的https安全連結的證書需要去CA認證機構申請,由於是除錯階段就採用了java的keytool工具來生成金鑰檔案

spring boot多環境配置檔案讀取不到的問題。

程式碼架構: 其中application.yaml中就三行程式碼: 作用是在IED啟動的時候指定當前環境。 但是其實我不是這麼做的,而是在idea中指定。 產生問題: 引入了一個自己寫的starter[jar包],jar包中配置了test環境的配置。但是專案啟動的時候指定了prof

基於Fourinone實現檔案監控

一、    任務簡介 建立兩臺Ubuntu虛擬機器,部署fourinone。一個主節點一個從節點,從節點監控某資料夾下檔案資訊,對一天內被修改十次以上的檔案進行轉移,轉移到主節點某目錄下。 二、    思路 從節點開啟一個監控執行緒,每三秒

Spring Boot使用AOP實現REST接口簡易靈活的安全認證

all 高級 mes 之前 接口 封裝 msg mage ror 本文將通過AOP的方式實現一個相對更加簡易靈活的API安全認證服務。 我們先看實現,然後介紹和分析AOP基本原理和常用術語。 一、Authorized實現1、定義註解 package com.power.de

程式設計實戰篇——Spring Boot 自動配置實現

基於Spring Boot自動配置的思想封裝起來,使其他Spring Boot專案引入後能夠進行快速配置。AutoConfiguration Spring Boot的一個重要特性就是提供了各種各樣的AutoConfiguration。例如DataSourceAutoConfiguration。這樣我們只需要在

Spring Boot中注入配置檔案application.properties中的list 物件引數

例如要注入下列引數: dyn.spring.datasources[0].name=branchtadyn.spring.datasources[0].driverClassName=oracle.jdbc.OracleDriverdyn.spring.datasources[0].url=jdbc:ora