【发布时间】:2019-01-18 21:42:23
【问题描述】:
我需要将数据存储到 .jar 文件中的文件中并再次读取。
我知道我可以使用Class.getResourceAsStream() 方法,但它返回一个InputStream,我可以从中读取。但我正在寻找一种写作的方式。
【问题讨论】:
标签: java jar inputstream outputstream
我需要将数据存储到 .jar 文件中的文件中并再次读取。
我知道我可以使用Class.getResourceAsStream() 方法,但它返回一个InputStream,我可以从中读取。但我正在寻找一种写作的方式。
【问题讨论】:
标签: java jar inputstream outputstream
我需要将数据存储到 .jar 文件中的文件中并再次读取它
不,你没有。
而是将“默认”文件存储在 Jar 中。如果已更改,请将更改后的文件存储在其他位置。一个常见的地方是user.home 的子目录。检查文件时,首先检查文件系统上是否存在修改过的文件,如果不存在则加载默认文件。
请注意,描述目标通常比描述策略更好。 “将更改的文件存储在 Jar 中” 是一种策略,而 “在运行之间保存首选项” 可能是目标。
【讨论】:
这不是真的支持。原则上,您可以对 jar 文件进行操作,但不能保证新内容会正确加载。让您的构建工具管理 jar 文件 - 并为由您的程序本身管理的持久性存储选择其他东西。像一个文件。
【讨论】:
您不可能安全地更改已加载的 jar。在使用时更改它不是一个好主意。
如果您想这样做,请使用普通文件系统目录并从中添加/删除文件。即使这样也可能无法如您所愿。
【讨论】:
您可以使用包java.util.jar(或者实际上只是java.util.zip)来操作任何jar 文件。由于 jar 中的文件将被压缩,这不是您存储数据的最时间效率的方式。
您可能应该在其他地方使用目录(例如System.getProperty("user.home") + "/.myProgram")或查看java.util.prefs。
【讨论】:
Class.getResource() 返回一个 URL。理论上,您可以使用此 URL 创建您的 InputStream 和 OutputStream。但在大多数情况下,生成的 JAR 是只读文件(或存档)。因此,您的应用程序在尝试使用时可能会出错。
【讨论】: