Java-如何发现用户更改了配置文件?
我正在开发一个Java桌面应用程序。此应用程序需要配置才能启动。为此,我希望为应用程序提供一个defaultConfig.properties或defaultConfig.xml文件,这样,如果用户没有选择任何配置,那么应用程序将在defaultConfig文件的帮助下启动 但是我担心如果用户不小心编辑了defaultConfig文件,我的应用程序会崩溃。因此,在应用程序启动之前,我可以通过任何机制检查配置文件是否已更改 市场上的其他应用程序如何处理其应用程序依赖于配置文件的这种情况 如果用户意外或有意编辑配置文件,则除非重新安装该应用程序,否则该应用程序将不会在将来运行Java-如何发现用户更改了配置文件?,java,configuration,config,Java,Configuration,Config,我正在开发一个Java桌面应用程序。此应用程序需要配置才能启动。为此,我希望为应用程序提供一个defaultConfig.properties或defaultConfig.xml文件,这样,如果用户没有选择任何配置,那么应用程序将在defaultConfig文件的帮助下启动 但是我担心如果用户不小心编辑了defaultConfig文件,我的应用程序会崩溃。因此,在应用程序启动之前,我可以通过任何机制检查配置文件是否已更改 市场上的其他应用程序如何处理其应用程序依赖于配置文件的这种情况 如果用户意
我不确定这是否是一个好的方法,但是如果你想继续这样做,你可以计算配置文件的散列,比如说md5,并在每次应用启动时重新计算和比较。
想想看,如果用户被禁止编辑文件,为什么要公开它?例如,将其粘贴在远离用户眼睛的jar文件中。我完全不确定这是否是一个好方法,但如果您想继续这样做,可以计算配置文件的散列,比如md5,并在每次启动应用程序时重新计算和比较。
想想看,如果用户被禁止编辑文件,为什么要公开它?例如,将其粘贴在一个jar文件中,远离用户的眼睛。如果默认配置不应该被编辑,那么您可能不想首先将其存储在一个文件中?您不能将配置的默认值直接存储在代码中吗?如果默认配置不应该被编辑,那么您可能不想首先将其存储在文件中?您不能直接将配置的默认值存储在代码中吗?我同意,使用MD5哈希是一种很好且简单的方法来实现您想要的功能 基本上,您可以使用JDK或其他地方提供的MD5哈希代码根据Config.xml中的默认数据生成哈希代码,并将该哈希代码保存到文件中,或将其硬编码到执行检查的函数中。然后,每次应用程序启动时,加载保存到文件中的哈希代码,然后加载Config.xml文件并再次从中生成哈希代码,将保存的哈希代码与从加载的配置文件生成的哈希代码进行比较,如果它们相同,则数据没有更改,如果它们不同,则数据已被修改
然而,正如其他人建议的那样,如果文件不应该被用户编辑,那么您应该考虑以用户无法编辑的方式存储配置。我能想到的最简单的事情是将用于在GZIP输出流中编写Config.xml文件的输出流包装起来。这不仅会使用户难以编辑配置文件,还会导致Config.xml文件占用更少的空间。
我同意,使用MD5哈希是一种很好且简单的方法来完成您想要的内容 基本上,您可以使用JDK或其他地方提供的MD5哈希代码根据Config.xml中的默认数据生成哈希代码,并将该哈希代码保存到文件中,或将其硬编码到执行检查的函数中。然后,每次应用程序启动时,加载保存到文件中的哈希代码,然后加载Config.xml文件并再次从中生成哈希代码,将保存的哈希代码与从加载的配置文件生成的哈希代码进行比较,如果它们相同,则数据没有更改,如果它们不同,则数据已被修改然而,正如其他人建议的那样,如果文件不应该被用户编辑,那么您应该考虑以用户无法编辑的方式存储配置。我能想到的最简单的事情是将用于在GZIP输出流中编写Config.xml文件的输出流包装起来。这不仅会使用户难以编辑配置文件,而且还会导致Config.xml文件占用更少的空间
删除文件的写入权限。这样,用户在尝试更改文件之前会收到警告。 添加散列或校验和,并在加载文件之前对此进行验证 为了增加安全性,可以用加密签名替换简单哈希。 删除文件的写入权限。这样,用户在尝试更改文件之前会收到警告。 添加散列或校验和,并在加载文件之前对此进行验证 为了增加安全性,可以用加密签名替换简单哈希。从我在网上发现的到目前为止,在代码方面似乎有不同的方法。似乎没有一个是100便士 百分率修正,例如: DirectoryWatcher实现 AbstractResourceWatcher监视 指定的目录 在这里找到的代码develope-a-java-file-watcher 遇到的一个问题是,如果我复制 来自远程网络的大文件 要删除的本地目录的源 监控后,该文件仍将显示 在目录列表中,但是 在网络拷贝完成之前。 如果我尝试做几乎任何非 那一刻对文件来说微不足道 例如将其移动到另一个目录或 打开它进行写入,将出现异常 被抛出,因为文件确实是 还没有完全做到这一点,还有操作系统 仍然有一个写锁 在同一个网站上找到,在下面 程序如何工作它接受ResourceListener类,即FileListener。如果在程序中检测到更改,将抛出onAdd、onChange或onDelete事件,并将文件传递给
将继续搜索更多解决方案。从我在网上找到的到目前为止,代码方面似乎有不同的方法。没有一个似乎是100%的修复,例如: DirectoryWatcher实现 AbstractResourceWatcher监视 指定的目录 在这里找到的代码develope-a-java-file-watcher 遇到的一个问题是,如果我复制 来自远程网络的大文件 要删除的本地目录的源 监控后,该文件仍将显示 在目录列表中,但是 在网络拷贝完成之前。 如果我尝试做几乎任何非 那一刻对文件来说微不足道 例如将其移动到另一个目录或 打开它进行写入,将出现异常 被抛出,因为文件确实是 还没有完全做到这一点,还有操作系统 仍然有一个写锁 在同一个网站上找到,在下面 程序如何工作它接受ResourceListener类,即FileListener。如果在程序中检测到更改,将抛出onAdd、onChange或onDelete事件,并将文件传递给
将继续搜索更多解决方案。在尝试从配置文件中加载设置之前,您是否可以在程序退出时存储文件的哈希值,并在程序启动时再次哈希以进行比较?为什么问题中的随机词会突出显示为代码?您是否可以在程序退出时存储文件的哈希值,然后再次哈希以进行比较比较您的程序在尝试从配置文件加载设置之前何时启动?为什么问题中的随机词会突出显示为代码?与.exe文件不同,Jar文件可以轻松解压缩。与.exe文件类似,Jar文件也可以轻松解压缩uncompressed@TomNeyland:是的,它可以-但不一定如此,取决于实际情况。@TomNeyland:是的,可以,但不一定如此,取决于实际情况。