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

时间:2016-04-01 11:58:58

标签: java jar jna

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

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

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

C程序不在我的控制之下,它不理解jar:file://路径。

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

1 个答案:

答案 0 :(得分:2)

该文件显然是打包在jar(或类路径)中:这是由 resource 表示的。

如果您使用网址:

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

一个人收到如下的网址:

"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()

视情况删除。