1

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

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

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


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

4

5 回答 5

4

我同意David的观点,即使用 MD5 哈希是完成您想要的事情的好方法。

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

但是,正如其他人建议的那样,如果文件不应该由用户编辑,那么您应该考虑以用户无法轻松编辑的方式存储配置。我能想到的最简单的事情是将Output Stream用于编写 Config.xml 文件的GZIP Output Stream. 这不仅会使用户难以编辑配置文件,而且还会导致 Config.xml 文件占用更少的空间。

于 2010-03-11T17:17:54.817 回答
2

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

于 2010-03-11T17:07:37.023 回答
0

如果不应该编辑默认配置,也许您一开始就不想将其存储在文件中?你不能直接在代码中存储配置的默认值吗?

于 2010-03-11T17:16:32.447 回答
0
  1. 删除文件的写权限。这样,用户在尝试更改文件之前会收到警告。
  2. 添加哈希或校验和并在加载文件之前验证这一点
  3. 为了增加安全性,您可以将简单哈希替换为加密签名。
于 2010-03-11T17:19:43.943 回答
0

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

DirectoryWatcher 实现 AbstractResourceWatcher 来监视指定的目录。

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

遇到的一个问题是,如果我将一个大文件从远程网络源复制到被监视的本地目录,该文件仍将显示在目录列表中,但在网络复制完成之前。如果我当时尝试对文件执行几乎任何不重要的操作,例如将其移动到另一个目录或打开它以进行写入,则会引发异常,因为文件实际上还没有完全存在并且操作系统仍然具有写入锁定它。

在同一站点上找到,在下面。

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

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

于 2010-03-11T17:22:25.637 回答