【问题标题】:Self exploding and rejaring jar file during execution执行期间自爆和重装jar文件
【发布时间】:2013-12-17 03:39:59
【问题描述】:

我目前正在开发一个程序,为我老师的教室制作坐表。我已将所有数据文件放入 jar 中。这些被读入并放入表中。运行程序的主要功能后,它会更新文件以匹配表的值。我知道我需要炸开罐子,然后在执行过程中重新打开它才能编辑文件,但我找不到任何关于如何在执行过程中重新打开的说明。有人有什么想法吗?

【问题讨论】:

    标签: java jar decompiling


    【解决方案1】:

    简答:

    将数据文件放在二进制文件之外,并与 JAR 一起放在单独的文件夹中。

    长一:

    您似乎是从错误的方向解决问题。 JAR 文件类似于 Windows 平台上的可执行文件 (.exe) - 一个包含代码只读二进制文件。

    您可以(尽管这是一种不好的做法)将一些资源(如数据文件、多媒体等)放入 JAR 中(就像您可以在 .exe 中一样)。但更好的解决方案是将这些资源放在二进制文件之外,这样您就可以在不重新编译/重建的情况下切换它们。

    如果您需要在应用程序运行时即时修改资源,您基本上别无选择。数据文件必须在二进制文件之外。再一次,您永远不会看到 Windows .exe 文件在运行时自行修改。

    【讨论】:

    • 谢谢。出于安全原因,我只是希望避免这样做,因为我只使用 .txt 文件。我不是最擅长安全编程的人。
    • @Taxes45 .jar 文件无论如何都不安全
    • 对于我给这个的人会更安全,这样他们就不会意外删除任何东西。 Puls 创建一个内部默认文件对我的代码大小来说是一件痛苦的事情。我用 Java 编程只有两年,它是我的第一语言。我知道的不多。
    • 我的老师在电脑方面不是最好的。这就是我为她制作这个程序的原因。
    【解决方案2】:

    Tomasz 说得对,以下是不好的做法,但有可能。

    类路径的内容在引导过程中被读入内存,但是文件是可修改的,但它们的更改不会在初始化后反映。我建议将数据放入另一个文件中,与您的类文件分开,但如果您坚持将它们放在一起,您可以查看:

    • JarInputStream 或 ZipInputStream 读取 JAR 文件的内容
    • 获取相应文件的 JarEntry
    • 根据需要阅读和修改内容
    • JarOutputStream 或 ZipOutputStream 将内容写回

    确保您没有通过类路径读取资源,并且它来自磁盘/网络上的文件。

    【讨论】:

      猜你喜欢
      • 2010-10-31
      • 1970-01-01
      • 1970-01-01
      • 2020-09-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-23
      • 1970-01-01
      相关资源
      最近更新 更多