Java項目 Everything

everything

1、項目描述

基於Java語言,模仿Linux下的find命令,實現windows下命令行的查找文件的功能,由於是Java語言開發,所以也具有跨平臺性

2、項目背景

在Linux下的find命令很好用,但是在windows下查找文件卻不是那麼方便,在windows界面查找速度非常慢而且還不能跨盤查找,因此開發這款命令行的查找工具,可以在windows下快速全盤查找。

3、使用到的技術

  • JavaSE基礎(文件操作)

  • Database(嵌入式H2數據庫或MySQL)

  • JDBC

  • Lombok庫(IDEA工具安裝Lombok插件)

  • Java多線程技術

  • 文件系統監控(Apache Commons IO)

  • pinyin4j (支持拼音搜索)

  • 設計模式(單例模式)

4、項目結構圖

項目採用分層結構,如下圖:

5、各個模塊簡單說明

5.1 模型

enum FileType 文件類型

class Condition 檢索文件的條件的模型類

class Thing 存入數據庫的一行

5.2 數據庫操作

1) 數據源 通過單例模式,獲取數據源

2)使用JDBC對數據庫中的文件進行增、刪、查

5.3業務層操作 

1)創建索引

  • 通過遞歸的方式遍歷一個文件夾下的所有文件

  • 將一個電腦上的文件類型轉化爲數據庫中的一個Thing(將文件信息轉換爲一個Thing的對象類型)

  • 判斷文件是否是要處理的目錄(定義了默認要查找的目錄和默認忽略的目錄,像C:\windows 之類的系統文件就可以忽略)

  • 通過FileSystems.getDefault().getRootDirectories(); 來獲取次電腦上有哪些盤(C:\\ D:\\ E:\\)

  • 電腦有幾個盤,就創建幾個線程,每個線程遍歷一個盤

  • 用CountDownLatch來控制多線程,等幾個線程都執行完之後提示用戶,索引創建完畢

2)查找文件

  • 通過查詢條件,調用數據庫的查詢方法,獲取查詢結果

  • 判斷查詢結果中的文件是否還存在,如果出查詢出來的文件在電腦上已經被刪除了,就把該文件從查詢結果集中刪除,同時,把它放在一個後臺清理的隊列中,在後臺刪除數據庫中不存在的文件(因爲從結果集中刪除一個元素是CPU操作,而從數據庫中刪除是IO操作,CPU操作比IO操作快的多,所以這裏把它放在後臺刪除,就像生產者,消費者模型)

3)文件監聽

  • JDK7中提供的WatchService也可以實現系統文件的監控,但是由於這個使用方法只能對一個目錄下的文件進行監控,而不能對目錄下的子目錄繼續監控,所以沒有使用這個方法。

  • 通過使用第三方jar包commons-io 中的類和方法進行文件監控。

  • 自己寫一個類 繼承FileAlterationListenerAdaptor類,覆寫裏面的部分方法(文件創建、文件刪除、目錄創建、目錄刪除),用來對系統文件進行監聽(其中FileAlterationMonitor實現了Runnable接口,因此是自己在後臺進行監聽),在程序啓動的時候就調用文件監聽的方法在後臺監聽

  • 將監聽到的文件變化(增加、刪除)信息寫入到一個txt文件中,同時,如果有文件新增,就將新增的文件寫入數據庫,如果文件刪除,就刪除數據庫中對應的文件

4)攔截器

因爲在遍歷系統文件的時候,我們還會對文件進行一些操作,比如:打印文件信息,將文件信息插入到數據庫中,刪除文件從數據庫中刪除等操作,這些操作又相互不影響,所以可以將它們單獨提取出來,作爲一個獨立的方法,叫做攔截器,在需要對應的操作的時候只需要調用對應的攔截器即可。

5.4 控制層

1)對之前的業務方法進行統一的調度;

2)通過配置文件的方式,讀取一些參數信息(比如:查詢的結果最多返回的數量,對查詢結果的排序方式(按深度/按查找名稱的相似度), 是否程序一運行就創建索引(默認不創建),進行文件系統監控的時間間隔,默認要查找的目錄,默認要排除的目錄(有些系統目錄可以不用查找))

5.5 命令行交互

通過對用戶輸入的字符串進行處理,判斷用戶具體想幹什麼,最後去控制層調用對應的業務方法.

6 使用介紹

方式1:項目寫完之後,使用maven工具打包,可以直接在命令行運行 .jar程序

maven打包:

 

 

運行結果:

 

方式2 :後來,我又對運行方式進行了優化,內置jre運行環境

將lib目錄(裏面放的是項目中需要導入的依賴jar包) 和 自己打的項目jar包, classes目錄拷到一個文件中,然後將自己裝的jre的所有目錄拷貝到同一個目錄下,然後寫一個簡單的.bat文件(run.bat),run.bat文件內容如下:

start jre/bin/java -jar find_in_windows-1.0.0.jar

最後目錄結構如下:

 

最後將這個文件壓縮,使用的時候只需要將文件解壓,雙擊run.bat文件即可(windows環境下的),運行結果:

 

7、運行結果展示

拼音搜索:

 

打開文件:

 

查詢:

 

根據文件名稱-類型查詢:

最後,我把源代碼都放到了github上,地址爲:https://github.com/feihhh/myFind

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章