38

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

我知道我可以使用Class.getResourceAsStream()方法,但它返回一个InputStream我可以读取的。但我在寻找一种写作方式。

4

5 回答 5

101

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

不,你没有。

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


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

相关: 什么是XY问题?

于 2011-02-19T17:32:37.473 回答
3

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

于 2011-02-19T17:26:25.087 回答
2

您不太可能安全地更换已加载的 jar。在使用时更改它不是一个好主意。

如果要执行此操作,请使用纯文件系统目录并从中添加/删除文件。即使这可能无法按您的预期工作。

于 2011-02-19T17:32:23.177 回答
2

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.

于 2011-02-19T17:34:59.343 回答
1

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.

于 2012-04-15T10:41:50.337 回答