应用程序如何使用JAR内的文件进行读写?

时间:2011-02-19 17:24:00

标签: java jar inputstream outputstream

我需要将数据存储到.jar文件中的文件中并再次读取。

我知道我可以使用Class.getResourceAsStream()方法,但它会返回InputStream,我可以读取。但我想找到一种方法来写。

5 个答案:

答案 0 :(得分:93)

  

我需要将数据存储到.jar文件中的文件中并再次读取

不,你没有。

而是将'default'文件存储在Jar中。如果更改,请将更改的文件存储在其他位置。一个常见的地方是user.home的子目录。检查文件时,首先检查文件系统上是否存在更改的文件,如果不存在,则加载默认文件。


请注意,描述目标通常更好,而不是策略。 '在Jar'中存储已更改的文件是一种策略,而'在运行'之间保存首选项可能是目标。

相关: What is the XY problem?

答案 1 :(得分:3)

这并不是真的支持。原则上,您可以对jar文件进行操作,但不能保证新内容可以正确加载。让您的构建工具管理jar文件 - 并为程序本身管理的持久存储选择其他内容。像文件一样。

答案 2 :(得分:2)

您不太可能安全地更换装满的罐子。在使用它时更改它不是一个好主意。

如果要执行此操作,请使用纯文件系统目录并从中添加/删除文件。即便如此,也可能无法达到预期效果。

答案 3 :(得分:2)

您可以使用包java.util.jar(或实际只是java.util.zip)来操作任何jar文件。由于jar中的文件将被压缩,这不是用于存储数据的最有效的 time 方式。

您应该使用其他地方的目录(例如System.getProperty("user.home") + "/.myProgram")或查看java.util.prefs

答案 4 :(得分:1)

Class.getResource()会返回一个网址。从理论上讲,您可以使用此网址来创建InputStreamOutputStream。但在大多数情况下,生成的JAR是只读文件(或存档)。因此,当您尝试使用它时,您的应用程序可能会跳闸。