我需要将数据存储到 .jar 文件中的文件中并再次读取。
我知道我可以使用Class.getResourceAsStream()
方法,但它返回一个InputStream
我可以读取的。但我在寻找一种写作方式。
我需要将数据存储到 .jar 文件中的文件中并再次读取。
我知道我可以使用Class.getResourceAsStream()
方法,但它返回一个InputStream
我可以读取的。但我在寻找一种写作方式。
我需要将数据存储到 .jar 文件中的文件中并再次读取
不,你没有。
而是将“默认”文件存储在 Jar 中。如果已更改,请将更改后的文件存储在其他位置。一个常见的地方是user.home
. 检查文件时,首先检查文件系统上是否存在修改过的文件,如果不存在,则加载默认文件。
请注意,描述目标通常比描述策略更好。 “将更改的文件存储在 Jar 中”是一种策略,而“在运行之间保存首选项”可能是目标。
相关: 什么是XY问题?
这不是真正支持的。原则上,您可以对 jar 文件进行操作,但不能保证新内容会正确加载。让您的构建工具管理 jar 文件——并为由程序本身管理的持久性存储选择其他东西。像一个文件。
您不太可能安全地更换已加载的 jar。在使用时更改它不是一个好主意。
如果要执行此操作,请使用纯文件系统目录并从中添加/删除文件。即使这可能无法按您的预期工作。
You can manipulate any jar file using the package java.util.jar
(or indeed just java.util.zip
). As files inside a jar will be compressed, this isn't the most time efficient way for you to store data.
You should probably use a directory somewhere else (e.g. System.getProperty("user.home") + "/.myProgram"
) or see java.util.prefs
.
Class.getResource()
returns a URL. Theoretically, you can use this URL to create your InputStream
and OutputStream
. But in most cases, the generated JAR is a read-only file (or archive). So your application might trip when trying to use it.