我需要将数据存储到.jar文件中的文件中并再次读取。
我知道我可以使用Class.getResourceAsStream()
方法,但它会返回InputStream
,我可以读取。但我想找到一种方法来写。
答案 0 :(得分:93)
我需要将数据存储到.jar文件中的文件中并再次读取
不,你没有。
而是将'default'文件存储在Jar中。如果更改,请将更改的文件存储在其他位置。一个常见的地方是user.home
的子目录。检查文件时,首先检查文件系统上是否存在更改的文件,如果不存在,则加载默认文件。
请注意,描述目标通常更好,而不是策略。 '在Jar'中存储已更改的文件是一种策略,而'在运行'之间保存首选项可能是目标。
答案 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()
会返回一个网址。从理论上讲,您可以使用此网址来创建InputStream
和OutputStream
。但在大多数情况下,生成的JAR是只读文件(或存档)。因此,当您尝试使用它时,您的应用程序可能会跳闸。