如何使用 Java 将文件移动到已编译的 .jar 文件中?

How do I move a file into a compiled .jar file using Java?

我正在制作一个文件导入系统,但我无法将文件移动到应用程序所在的已编译 .jar 文件中。 这是我正在尝试做的事情:

Path FROM = Paths.get(filePath.getText());
Path TO = Paths.get("C:\Users\" + System.getProperty("user.name") + 
"\AppData\Roaming\.minecraft\mods\music_crafter-1.0\src\main\resources\assets\music_crafter\sounds\block\music_player");
                                       //jar file
Files.move(FROM, TO.resolve(FROM.getFileName()), StandardCopyOption.REPLACE_EXISTING);

您需要在内部处理 jar 文件。一个 Jar 不是一个目录,它是一个压缩的容器文件(几乎是一个具有不同扩展名的 ZIP 文件)。

要做到这一点,假设您使用的是 Java 6,您有 2 个选择:

  1. 将内容解压到一个临时工作目录(有内置的 为此,在 API 中,或使用诸如 Apache Commons Compress 之类的库) 完成您的工作(复制、删除等),然后重新压缩。
  2. 对随附的 Jar 实用程序进行外部命令行调用 Java

其中,只有 (1) 真正有意义。

如果您可以将 Java 提高到 7+,则可以使用第三个选项: 3. 在code

中使用Zip File System Provider将其视为文件系统

话虽如此:

根据对您问题的评论,您真的可能想看看这是否是您需要做的事情?为什么需要插入到现有罐子中?如果这是 'external' 数据,在单独的资源 location/container 中会好得多,而不是应用程序 jar。