但加密檔案,一定會動檔案作異動。這個時候若有可以監控指定目錄下的檔案異動程式,就可以得知是否有可疑的異動。以便使用者進一步作處理。
因此 File Monitor 這個程式,就是因應這樣的需求而作的。
本程式是用 Java 語言,在 Eclipse 下寫作而成。
1. 首先是大概確認使用案例,這裡用簡單的 UML Use case 表示
使用者可以有三個動作,一是執行或停止監控,一是設定指定監控目錄,最後則是設定選項,可以指定目錄、指定檔名過瀘、顯示訊息、撥放聲音檔、執行程式等。先實作紅色框的部分。
2.使用 Eclipse ,建立 FileMonitor 專案,並用 WindowBuilder 拉出如下的視窗
畫面分成三個部分,
上方 panel,放 Monitor Directory: 文字和按鈕等元件
中間 scrollPane,放顯示監控到的檔案異動 textArea
下方 textPane,顯示訊息
3. 實作檔案監控的部分,需要使用到 WatchService API ,可參考 Watching a Directory for Changes ,使用它所提供
WatchDir
example,原程式是命令模式執行,並用 System.out 輸出訊息,因此要修改為接收一個 textArea 作輸出。此外,把 WatchDir 實作 Runnable 界面,這樣就可以用 Thread 起動。因此也需加上 run() 的實作部分。4.在 UI 使用 WatchDir,主要增加 button 的動作。
btnStart = new JButton("Start"); btnStart.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { try { wd = new WatchDir(Paths.get(textField.getText()), true, textArea); Thread t = new Thread(wd); t.setDaemon(true); t.start(); btnStart.setEnabled(false); btnStop.setEnabled(true); } catch (IOException e1) { textPane.setText(e1.getMessage()); } } }); panel.add(btnStart); btnStop = new JButton("Stop"); btnStop.setEnabled(false); btnStop.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { wd.stopRunning(); btnStart.setEnabled(true); btnStop.setEnabled(false); } }); panel.add(btnStop); btnClear = new JButton("Clear"); btnClear.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { textArea.setText(""); } }); panel.add(btnClear);
5. 實際的執行結果如下
沒有留言:
張貼留言