将 Java jar 中文本文件的路径传递给 C 库?

Pass path to text file in Java jar to a C library?

我有一个包含文本文件的 Java jar 文件。从 jar 中的 Java 代码,我使用 JNA 调用 C 库中的函数。我需要将文本文件的文件路径传递给 C 函数之一,以便 C 程序可以读取它。

因为是C程序而不是Java程序需要读取文件,我不能简单地这样做:

getClass().getResourceAsStream("MyFile.txt");

C 程序不受我控制,它不理解 jar:file:// 路径。

如何做到这一点? jar 的内容是否自动提取到某处?我需要把它提取到某个地方吗?当我不能确定我在任何地方都具有写入权限时,我该怎么做?

该文件显然打包在 jar(或 class 路径)中:即 resource.

的意思

如果你乘坐 URL:

getClass().getResource("MyFile.txt");

一个收到 URL 喜欢:

"jar:file://...path-to-jar... .jar! ...package-path-of-class.../MyFile.txt"

C 部分必须从 jar 中解压缩该条目(jar 是一个 zip),然后就完成了。介意的"jar:file:/"。

如果不能更改C部分,创建一个临时文件

Path path = Files.createTempFile("temp_", ".txt");
Files.copy(getClass().getResourceAsStream("MyFile.txt", path));

这些函数可以有额外的参数,文件属性。 并传递 path.toString().

酌情删除。