1. 程式人生 > >JAVA自動監聽檔案內容

JAVA自動監聽檔案內容

自動監聽器 PropertiesListener

import javax.servlet.*;

/**
  * 自動監聽器
  *
  */
public class PropertiesListener implements ServletContextListener  {
     
     /**
      * 自動監聽時鐘
     */
     private PropertiesTimer rt = null;
     
     public void contextInitialized(ServletContextEvent event) {
         String status = "Properties listener start .";
         event.getServletContext().log(status);
         System.out.println(status);
         
         // 啟用自動監聽時鐘
        rt = new PropertiesTimer(15, event.getServletContext());
         rt.start();
     }
     
     public void contextDestroyed(ServletContextEvent event) {
         String status = "Properties listener stop .";
         event.getServletContext().log(status);
         System.out.println(status);
         
         // 停止自動監聽時鐘
        if (rt != null) {
             rt.stop();
         }
     }
 }
自動監聽時鐘 PropertiesTimer
import java.util.*;
import javax.servlet.*;


/**
  * 自動監聽時鐘
  *
  */
public class PropertiesTimer {
     
     private final Timer timer = new Timer();
     private final int sec;
     private ServletContext context = null;
     
     public PropertiesTimer(int seconds, ServletContext context) {
         sec = seconds;
         this.context = context;
     }
     
     /**
      * 啟動自動監聽任務
     */
     public void start() {
         
         // 取得當前日期時間
        Date date = new Date();
         
         // 執行自動監聽計劃
        timer.schedule(new PropertiesTask(this.context), date, sec * 1000);
     }
     
     /**
      * 停止自動監聽任務
     */
     public void stop() {
         timer.cancel();

     }

 }

自動監聽任務 PropertiesTask
import java.io.IOException;
import java.io.*;
import java.util.*;

import javax.servlet.*;
/**
  * 自動監聽任務
 * @author stephen
  *
  */
public class PropertiesTask extends TimerTask {
     
     private ServletContext context = null;
     /**
      * 配置檔案的最後更新時間
     */
     private long lastModified = 0;
     
     /**
      * 構造一個自動更新任務
     * @param context
      */
     public PropertiesTask(ServletContext context){
         this.context = context;
         System.out.println("A task instance is created now."); // 任務在整個 application 週期內只建立一次。
    }
     
     /**
      * 每次執行任務時顯示一個隨機數。
     */
     public void todoTestRandom(){
         System.out.println("Task running");
         context.setAttribute("random", String.valueOf(Math.random()));
         System.out.println((String)context.getAttribute("random"));
     }
     
     /**
      * 監聽配置檔案是否被更新。
     */
     public void todoTestFileStatus(){
         System.out.println("Getting file status");
         System.out.println(this.isFileUpdated("WEB-INF/platforms/test.properties"));
     }
     
     /**
      * 監聽配置檔案是否被更新,自動更新檔案中的配置項儲存到 application 變數中。
     */
     public void todo(){
         String filename = "WEB-INF/platforms/test.properties";
         if(this.isFileUpdated(filename)){
             
             System.out.println("Getting properties");
             try{
                 this.loadProperties("test", filename);
             }catch(IOException ioe){
                 System.err.println(ioe.getMessage());
             }
         }
         System.out.println("Test value is: " + this.getTestProperty("name"));
     }
     
     public void run() {
         todoTestRandom();
         todo();
         //todo();
    }
     
     /**
      * 判斷物理檔案是否已被更新
     * @param filename 物理檔名
     * @return 是 true 否 false
      */
     private boolean isFileUpdated(String filename){
         File file = new File(context.getRealPath(filename));
         if(file.isFile()){
             long lastUpdateTime = file.lastModified();
             if(lastUpdateTime > this.lastModified){
                 System.out.println("The properties file was modified.");
                 this.lastModified = lastUpdateTime;
                 return true;
             }else{
                 System.out.println("The properties file was not modified.");
                 return false;
             }
         }else{
             System.out.println("The path does not point to a file.");
             return false;
         }
     }
     
     /**
      * 獲取配置檔案
     * @param key
      * @param filename
      * @return
      */
     public void loadProperties(String key, String filename) throws IOException{
         Properties prop = new Properties();
         InputStream stream = context.getResourceAsStream(filename);
         prop.load(stream);
         if(stream!=null){
             stream.close();
         }
         context.setAttribute(key, prop);
     }
     
     /**
      * 從 application 取配置項的值
     * @param key 配置項的鍵名
     * @return 配置項的值
     */
     public String getTestProperty(String key){
         Properties prop = (Properties)context.getAttribute("test");
         if(prop==null){
             return null;
         }else{
             return (String)prop.get(key);
         }
     }

 }

web.xml 配置
<?xml version="1.0" encoding="GB18030"?>
<web-app version="2.4" 
     xmlns="http://java.sun.com/xml/ns/j2ee" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
      
<listener>
     <listener-class>org.stephencat.listener.PropertiesListener</listener-class>
</listener>    
</web-app>



相關推薦

JAVA自動檔案內容

自動監聽器 PropertiesListener import javax.servlet.*; /** * 自動監聽器 * */ public class PropertiesListener implements ServletContextListene

設定Flume檔案內容

應用場景 按照Hadoop完全分散式安裝Flume博文,測試使用了Flume監聽資料夾,當資料夾中添加了檔案,Flume設定會立馬進行收集資料夾中的新增的檔案,那麼這是一種應用場景,但是如果我們想收集檔案中的內容,該如何辦呢?比如,linux目錄下有一個檔案,我會往這個檔案裡不斷的新增內容,那麼

JAVA自動程式

package com.insenz.video;import java.io.*;import java.util.*;import javax.servlet.*;import javax.servlet.http.*;import javax.servlet.ServletContextListener

JAVA 專案檔案是否發生變化

1、Spring容器都初始化完成之後做操作 package com.luwen.dai; import org.springframework.beans.factory.annotation.Autowired; import org.springframewo

時時input內容的改變

強人 tint doc 獲取 interval ons cti keypress span 心得:我們都知道inoput有一個change事件,但是是在input元素失去焦點的時候發生,不能時時的監聽input內容的改變。    剛開始的時候我是想用setInterval

java實時日誌寫入kafka

put article -c exti tab round 1.5 valueof max 目的 實時監聽某目錄下的日誌文件,如有新文件切換到新文件,並同步寫入kafka,同時記錄日誌文件的行位置,以應對進程異常退出,能從上次的文件位置開始讀取(考慮到效率,這裏是每

Javascript----input事件實現動態textarea內容變化

span oninput idt ava ntb ima property onchange pre 1、代碼 <!DOCTYPE html> <html> <head> <title>textarea輸入文字監聽

Java事件機制與觀察者設計模式

idea demo1 script 操作 alt face ner over 方法 一. Java事件監聽機制 1. 事件監聽三要素: 事件源,事件對象,事件監聽器 2. 三要素之間的關系:事件源註冊事件監聽器後,當事件源上發生某個動作時,事件源就會調用事件監聽的一個方法,

python 使用生成器 來完成 檔案輸入的例子

def tail(filename):#函式 f = open(filename,encoding='utf-8') while True: line = f.readline() if line.strip(): yield line.strip() g = tail('file')#引用 設定檔

node-sass 生成sourcemap/檔案

node-sass 生成sourcemap/監聽檔案 0.無關緊要的叨叨(可跳過) 遇到問題->> 不知道怎麼用node-sass生成sourcemap檔案,我本地的ruby環境下是可以直接生成的 但是現在做的專案就是要求把之前用ruby編譯的saas檔案全部改成

自定義JAVA事件機制

JAVA中的事件機制的參與者有3種角色:Event、EventSource、Listener 1.Event:就是事件產生時具體的“事件”,用於Listener的相應的方法之中,作為引數一般存在於Listener的方法之中。 2.EventSource:事件源,它的作用主要是對事件和監聽進行

通過jna簡單實現java後臺鍵盤觸發修改系統時間

      由於玩某網遊需要在出副本時等一分鐘,而修改系統時間+1分鐘可以提前出副本,避免麻煩寫了個java後臺監聽鍵盤觸發修改系統時間的指令碼,當按下設定好的鍵盤組合即呼叫修改函式。     修改時間的函式程式碼如下(呼叫CMD命令):

java Api 讀取HDFS檔案內容

package dao; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.*; import java.io.*; public class HDFSApi { /** * 讀取檔案內

webbrowser內容改變

論壇上一位朋友發貼想實現這樣功能:在webbrowser(編輯狀態)中輸入@,然後能捕獲隨後輸入的幾個字元。貼子見: https://bbs.csdn.net/topics/390995682?page=1#post-403542646  監聽鍵盤事件有兩個缺陷: 1.它只能監

gulp構建專案(三):gulp-watch檔案改變、新增、刪除

一、gulp.watch()功能介紹 舉例說明:當’./src/*.html’發生變化時,執行’html’任務,同時重新整理瀏覽器。如下: gulp.task('watch', function(){ gulp.watch('./src/*.

Java 自動讀取json檔案轉化為實體類

思路: 1 建立一個輔助類,與json檔案和轉化實體類分別建立對應關係 2 建立輔助類的註解屬性與json檔案屬性對應 3 輔助類欄位屬性與實體類相同 具體需求 json檔案 {"Main": {"TestNo": "30103182222","appliName": "大小

Java之讀取XML檔案內容

下面是我的Persons.xml檔案內容: <?xml version="1.0" encoding="utf-8"?> <persons> <person id="0

Java 自動判斷配置檔案是否已經存在,如果不存在自動建立,如果存在直接讀寫

try {     pro.load(new BufferedInputStream(new FileInputStream("config.ini"))); } catch (FileNotFoundException e) {     pro.put("GuestDefaultFloor", "10");

flume簡介與檔案目錄並sink至hdfs實戰

場景 1. flume是什麼 1.1 背景   flume 作為 cloudera 開發的實時日誌收集系統,受到了業界的認可與廣泛應用。Flume 初始的發行版本目前被統稱為 Flume OG(original generation),屬於 clo

滾動條的內容隨著滾動條動態載入

<!DOCTYPE html> <html> <head> <title>當滾動條滑到底部時自動載入內容</title> <meta http-equiv="Content-Type" con