我的Java程序如何在.jar文件中存储文件?

lia*_*dee 13 java jar archive

我知道.jar文件基本上是归档文件和应用程序.我要问的是如何在程序中存储数据(实际文件而不仅仅是字符串)?我想在我的Java代码中执行此操作.

如果你想知道我正在制作一个游戏的服务器mod,原因就在于此.服务器启动并创建所有级别数据,我想将所有这些文件存储在我的.jar应用程序中.

Ste*_*n C 19

是的,你可以这样做.

可以使用访问类路径上的JAR文件中的非代码资源Class.getResourceAsStream(String).应用程序通常会执行此操作,例如,将国际化消息作为资源包嵌入.

要将文件放入JAR文件,只需将其复制到输入目录树中的适当位置,然后再运行该jar命令.

跟进

理论上,在某些情况下,您的应用程序可以将文件存储在自己的JAR文件中:

  • JAR必须是本地文件系统中的文件; 即不是从远程服务器获取的JAR.
  • 应用程序必须具有对JAR文件及其父目录的写访问权.
  • 应用程序不必读回它在当前类加载器中写入JAR的文件; 即没有退出并重新启动.
  • JAR必须不需要签名.

程序将是:

  1. 找到JAR文件并打开为ZIP存档阅读器.
  2. 创建ZIP归档编写器以编写新版本的JAR文件.
  3. 将应用程序的文件写入writer.
  4. 将ZIP阅读器中的所有资源写入编写器,不包括旧版本的应用程序文件.
  5. 关闭读者和作家.
  6. 重命名新版本的JAR以替换旧版本.

如果初始JAR被JVM/OS锁定,则最后一步可能不起作用.在这种情况下,您需要在包装器脚本中重命名.

但是,我认为大多数人会同意这是一个不好的想法.只编写常规文件更简单,更健壮.

  • +1指出如何回答问题,同时指出不应该这样做。 (2认同)