我知道 .jar 文件基本上是归档文件,也是应用程序。我要问的是如何存储程序中的数据(实际文件而不仅仅是字符串)?我想在我的 Java 代码中执行此操作。
如果您想知道我正在制作游戏的服务器模组,那么这样做的原因。服务器启动并创建所有关卡数据,我想将所有这些文件存储在我的 .jar 应用程序中。
最佳答案
是的,您可以做到这一点。
可以使用 Class.getResourceAsStream(String)
访问类路径上 JAR 文件中的非代码资源。应用程序通常会执行此操作,例如,将国际化消息嵌入为资源包。
要将文件放入 JAR 文件(在项目构建时!),只需在运行 jar
命令之前将其复制到输入目录树中的适当位置。 Maven、Gradle 等构建工具可以为您自动化。
Is there a way to add files to the archive within the app?
理论上,在某些情况下,您的应用程序可以将文件存储在自己的 JAR 文件中:
- JAR 必须是本地文件系统中的一个文件;即不是从远程服务器获取的 JAR。
- 应用程序必须具有对 JAR 文件及其父目录的写入权限。
- 应用程序必须不需要在当前类加载器中读回它写入 JAR 的文件;即无需退出和重新启动。
- JAR 必须不需要签名。
程序是:
- 找到 JAR 文件并作为 ZIP 存档阅读器打开。
- 创建 ZIP 存档编写器以编写新版本的 JAR 文件。
- 将应用程序的文件写入编写器。
- 将所有资源从 ZIP 阅读器写入写入器,不包括旧版本的应用程序文件。
- 关闭读取器和写入器。
- 重命名 JAR 的新版本以替换旧版本。
如果初始 JAR 被 JVM/OS 锁定,最后一步可能不起作用。在这种情况下,您需要在包装脚本中进行重命名。
但是,我认为大多数人都会同意这是一个坏主意。只写常规文件更简单、更健壮。
关于java - 我的 Java 程序如何在其 .jar 文件中存储文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4056682/