为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

犯罪嫌疑人X 2020-02-01 17:06:10
我知道.jar文件基本上是归档文件,也属于应用程序。我要问的是如何存储程序中打包的数据(实际文件而不仅仅是字符串)?我想在我的Java代码中执行此操作。如果您想知道的原因是我正在生产一个游戏的服务器mod。服务器启动并创建所有级别数据,我想将所有这些文件存储在我的.jar应用程序中。
查看完整描述

3 回答

?
梦里花落0921

TA贡献1772条经验 获得超6个赞

是的,您可以这样做。

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

要将文件放入JAR文件,只需在运行jar命令之前将其复制到输入目录树中的相应位置即可。

跟进

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

  • JAR必须是本地文件系统中的文件。即不是从远程服务器获取的JAR。

  • 该应用程序必须具有对JAR文件及其父目录的写权限。

  • 应用程序不必在当前的类加载器中回读它写入JAR的文件。即不退出并重新启动。

  • JAR不必签名。

该过程将是:

  1. 找到JAR文件,然后将其作为ZIP存档阅读器打开。

  2. 创建一个ZIP归档编写器以编写新版本的JAR文件。

  3. 将应用程序的文件写入编写器。

  4. 将所有从ZIP读取器的资源写入写入器,但不包括旧版本的应用程序文件。

  5. 关闭读者和作家。

  6. 重命名新版本的JAR以替换旧版本。

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

但是,我认为大多数人都会同意这是一个糟糕的想法。仅编写常规文件更简单,更强大。


查看完整回答
反对 回复 2020-02-01
?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

其他答案提供了一些不错的策略,但我建议您朝一个稍微不同的方向前进。


该游戏据说具有图形,是桌面应用程序。从Web服务器分发桌面应用程序是最容易的。


如果您的游戏都符合上述两个条件,则可以考虑使用Java Web Start进行部署。


JWS提供了其他应用程序不可用的API。&PersistenceService是对此问题特别感兴趣的一个。PersistenceService允许应用程序存储和还原少量数据。(即使它在沙盒中)。我做了一个小演示。的PersistenceService。


想法是检查PersistenceService是否有应用程序数据,如果找不到,请使用Jars中的数据。如果用户/应用程序更改了数据,则将更改后的数据写入PersistenceService。


JWS还提供了其他一些不错的功能,例如启动屏幕,桌面集成,自动更新。


查看完整回答
反对 回复 2020-02-01
  • 3 回答
  • 0 关注
  • 805 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信