Java - 如何找到用户已更改配置文件?

时间:2010-03-11 17:04:25

标签: java configuration config

我正在开发Java Desktop Application。此应用需要启动configuration。为此,我想为应用程序提供defaultConfig.propertiesdefaultConfig.xml文件,以便如果用户未选择任何配置,则应用程序将在defaultConfig文件的帮助下启动。

但是,如果用户意外编辑defaultConfig文件,我担心应用程序崩溃。那么我是否有任何机制可以在应用程序启动之前检查config文件是否已更改。

  

其他应用程序(在市场上)如何处理其应用程序依赖于配置文件的这种情况?


  

如果用户无意或有意地编辑了配置文件,那么除非重新安装应用程序,否则应用程序将来不会运行。

5 个答案:

答案 0 :(得分:4)

我同意David一样,使用MD5哈希是一种很好的简单方法来实现你想要的。

基本上,您将使用JDK(或其他地方)提供的MD5哈希代码根据Config.xml中的默认数据生成哈希代码,并将该哈希代码保存到文件中(或将其硬编码为执行检查的功能)。然后每次您的应用程序开始加载您保存到文件的哈希代码,然后加载Config.xml文件并再次从中生成哈希代码,将保存的哈希代码与从加载的配置生成的哈希代码进行比较文件,如果它们相同则数据没有改变,如果它们不同,则数据已被修改。

然而,当其他人建议用户不能编辑该文件时,您应该考虑以用户无法轻易编辑的方式存储配置。我能想到的最简单的事情就是将Output Stream包裹起来用于在GZIP Output Stream中编写Config.xml文件。这不仅会使用户难以编辑配置文件,而且还会导致Config.xml文件占用更少的空间。

答案 1 :(得分:2)

我不确定这是一个好方法但是如果你想继续这个,你可以计算配置文件的哈希值(比如md5),并在每次应用程序启动时重新计算和比较。 想一想,如果用户被禁止编辑文件,为什么要公开它呢?例如,将其粘贴在一个jar文件中,远离用户的眼睛。

答案 2 :(得分:0)

如果不应该编辑默认配置,或许你真的不想将它存储在文件中?你能否直接在代码中存储配置的默认值?

答案 3 :(得分:0)

  1. 删除文件的写入权限。这样,用户在尝试更改文件之前会收到警告。
  2. 添加哈希或校验和并在加载文件之前验证这一点
  3. 为了增加安全性,您可以使用加密签名替换简单哈希。

答案 4 :(得分:0)

从我在网上发现到目前为止,似乎有不同的方法代码明智。没有一个似乎是100%修复,例如:

  

DirectoryWatcher实现   AbstractResourceWatcher监视一个   指定目录。

此处的代码twit88.com develop-a-java-file-watcher

  

遇到的一个问题是如果我复制   来自远程网络的大文件   源到本地目录   受监控,该文件仍将显示   在目录列表中,但是   在网络副本完成之前。   如果我尝试几乎做任何事情   那一刻文件微不足道   比如把它移到另一个目录或   打开它写作,一个例外   被抛出,因为真的是文件   尚未完全存在和操作系统   还有一个写锁定。

在同一网站上找到,位于下方。

程序如何工作它接受一个ResourceListener类,即FileListener。如果在程序中检测到更改,则会抛出onAdd,onChange或onDelete事件并将文件传递给。

将继续寻找更多解决方案。