2010-03-11 63 views
1

我正在開發Java Desktop Application。這個應用程序需要啓動一個configuration。爲此,我想爲應用程序提供一個defaultConfig.propertiesdefaultConfig.xml文件,以便如果用戶沒有選擇任何配置,那麼應用程序將在defaultConfig文件的幫助下開始。Java - 如何查找用戶已更改配置文件?

但是我怕應用程序崩潰,如果用戶不小心編輯了defaultConfig文件。那麼是否有任何機制可以在應用程序啓動之前檢查config文件是否已更改。

其他應用程序(市場外)如何處理這種類型的應用程序依賴於配置文件的情況?


如果用戶編輯配置文件無意或有意,那麼應用程序將無法在未來的運行,除非他重新安裝應用程序。

+0

當程序退出時,您可以存儲該文件的哈希值,並在程序啓動時再次哈希以進行比較(在嘗試將設置從配置文件中加載之前)? – Imran 2010-03-11 17:07:23

+0

'爲什麼'''你的'問題'中的隨機'單詞'突出顯示爲'代碼'? – Nate 2010-03-11 20:03:57

回答

4

我同意David,因爲使用MD5哈希是一種很好且簡單的方法來完成你想要的。

基本上你會使用由JDK提供的MD5哈希碼(或其他地方)的基礎上Config.xml中的默認數據生成一個散列代碼,並保存哈希碼到一個文件(或硬編碼進入執行檢查的函數)。然後,每次應用程序開始加載保存到文件的散列碼,然後加載Config.xml文件並再次生成散列碼時,將保存的散列碼與加載的配置生成的散列碼進行比較文件,如果它們相同,那麼數據沒有改變,如果它們不同,則數據已被修改。

但是,正如其他人所建議的,如果文件不應該由用戶編輯,那麼你應該考慮以用戶不容易編輯的方式存儲配置。我能想到的最簡單的方法就是將您用於編寫Config.xml文件的Output Stream打包在GZIP Output Stream中。這不僅會使用戶難以編輯配置文件,而且還會導致Config.xml文件佔用更少的空間。

2

我不敢肯定,這是一個很好的方法,但如果你想繼續用這個就可以計算在配置文件的哈希值(比如MD5),並重新計算和應用程序啓動時比較每一次。 想想看,如果用戶被禁止編輯一個文件爲什麼要暴露它?例如,將其粘貼在一個jar文件中,遠離用戶的眼睛。

+0

與.exe文件不同,Jar文件可以很容易地解壓縮 – 2010-03-12 04:24:00

0

如果默認配置不應該被編輯,也許你真的不想將它存儲在一個文件中的第一個地方?你不能直接在代碼中存儲配置的默認值嗎?

+0

此解決方案可能會導致許多問題。 – 2010-03-11 17:19:01

+0

@TomNeyland:是的,它可以 - 但不一定如此,這取決於實際情況。 – Thomas 2010-03-12 09:53:32

0
  1. 刪除文件的寫入權限。這樣用戶在嘗試更改文件之前會收到警告。
  2. 加載散列或校驗和並在加載文件之前驗證此文件
  3. 爲了增加安全性,可以用簡單簽名替換簡單散列。
0

從我到目前爲止在網上找到的代碼明智似乎有不同的方法。沒有似乎是一個100百分之百的修復,例如:

的DirectoryWatcher實現 AbstractResourceWatcher監視 指定的目錄。

代碼發現這裏twit88.com發展-A-Java的文件觀察家

一個問題,遇到的是如果我複製 一個大文件從遠程網絡 源到本地目錄是 監測,該文件仍然會在目錄列表中顯示 ,但在網絡副本完成之前仍會顯示 。 如果我試圖在那一刻 做到幾乎不 微不足道的文件類似的東西移動到另一個目錄或 打開它進行寫作,異常會 被拋出,因爲真正的文件 尚未完全存在和OS 仍然有寫鎖定。

發現在同一網站,下面進一步的內容。

程序如何工作它接受一個ResourceListener類,它是FileListener。如果在程序中檢測到更改,onAdd,onChange或onDelete事件將被拋出並傳遞給該文件。

將繼續尋找更多的解決方案。