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

发布于 2024-10-17 23:30:58 字数 183 浏览 5 评论 0原文

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

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

I need to store data into files inside .jar file and read it again.

I know that I can use Class.getResourceAsStream() method but it returns an InputStream that I can read from. But I look for a way to write.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

绻影浮沉 2024-10-24 23:30:58

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

不,你不需要。

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


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

相关: 什么是 XY 问题?

I need to store data into files inside .jar file and read it again

No you don't.

Instead store the 'default' file inside the Jar. If it is changed, store the altered file in another place. One common place is a sub-directory of user.home. When checking for the file, first check the existence of an altered file on the file system, and if it does not exist, load the default file.


Note that it is generally better to describe the goal, rather than the strategy. 'Store changed file in Jar' is a strategy, whereas 'Save preferences between runs' might be the goal.

Related: What is the XY problem?

笑着哭最痛 2024-10-24 23:30:58

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

This is not really supported. In principle, you could operate on the jar file, but there's no guarantee the new contents would be correctly loaded. Let your build tools manage the jar file -- and choose something else for persistent storage managed by your program itself. Like a file.

悲歌长辞 2024-10-24 23:30:58

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

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

It is unlikely that you can change a loaded jar safely. Changing it while it is being used is not a good idea.

If you want to do this, use a plain file system directory and add/remove files from it. Even this may not work as you expect.

二智少女 2024-10-24 23:30:58

您可以使用包java.util.jar(或者实际上只是java.util.zip)来操作任何jar 文件。由于 jar 内的文件将被压缩,因此这不是存储数据最时间的方式。

您可能应该在其他地方使用目录(例如System.getProperty("user.home") + "/.myProgram")或参见java.util.prefs

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.

十级心震 2024-10-24 23:30:58

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

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文