【问题标题】:Saving application data transparently透明地保存应用程序数据
【发布时间】:2013-04-29 22:27:10
【问题描述】:

我正在用 Java 编写游戏,我想保存我的游戏。我将把它作为一组 XML 文档保存在一个 zip 文件中。我想知道的是他们是否是一种我可以透明地做到这一点的方式,以便用户无法编辑这些文件或找到它们。我曾考虑过将文件隐藏起来,但这似乎是一种肮脏而丑陋的方式。我最不喜欢隐藏文件的一点是它们在系统之间似乎不兼容。如果他们无论如何都要将文件保存到 jar 中并从中读取它们,那也是同样可以接受的。在java中似乎也没有隐藏文件的好方法。任何帮助将不胜感激。

【问题讨论】:

  • 使用对象序列化怎么样?结果将很难编辑,但并非不可能。
  • 我知道,但是我必须创建一个保存文件夹,并且我还必须担心版本之间的兼容性,我同时编写了多个对象,但是我使用 xml 来序列化我的对象使用 XMLEncoder 并将所有 xml 文件保存到 zip。
  • 你可以使用你的 XML 格式,但要通过一个加盐的哈希,这样玩家就不能直接编辑它而不会损坏它。

标签: java xml zip save hidden-files


【解决方案1】:

我想知道的是,如果他们是我可以透明地执行此操作的一种方式,以便用户无法编辑这些文件或找到它们。

最终,不会。

您在本地计算机上存储状态的任何操作最终都可以被逆向工程,并且该状态可以由特权用户检索。

但您可以采取多种措施让人们难以“作弊”。例如,您可以加密文件,或生成种子哈希来检测“修补”。


在 Java 7 上隐藏文件很简单:

Path path = FileSystems.getDefault().getPath("directory", "hidden.txt");
Boolean hidden = path.getAttribute("dos:hidden", LinkOption.NOFOLLOW_LINKS);
if (hidden != null && !hidden) {
    path.setAttribute("dos:hidden", Boolean.TRUE, LinkOption.NOFOLLOW_LINKS);
}

(复制自:http://javarevisited.blogspot.com/2012/01/how-to-hide-file-java-program-example.html

在早期版本的 Java 中,您需要调用外部 Windows 应用程序或调用本机库来执行此操作。但请注意:

  • “隐藏”文件只对懒得看的用户隐藏
  • 它们在不同平台上的工作方式不同;例如对于基于 Linux/Unix 的系统,“隐藏”仅表示文件名以“.”开头。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-09
    • 2018-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-18
    • 2015-03-06
    相关资源
    最近更新 更多