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

将Java jar中文本文件的路径传递到C库?,java,jar,jna,Java,Jar,Jna,我有一个javajar文件,其中包含一个文本文件。从jar中的Java代码中,我使用JNA调用C库中的函数。我需要将文本文件的文件路径传递给一个C函数,以便C程序能够读取它 因为需要读取文件的是C程序而不是Java程序,所以我不能简单地这样做: getClass().getResourceAsStream("MyFile.txt"); C程序不在我的控制之下,它不理解jar:file://路径 如何做到这一点?罐子里的内容是自动提取出来的吗?我需要在什么地方提取吗?当我不能确定我在任何地方都有

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

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

getClass().getResourceAsStream("MyFile.txt");
C程序不在我的控制之下,它不理解
jar:file://
路径


如何做到这一点?罐子里的内容是自动提取出来的吗?我需要在什么地方提取吗?当我不能确定我在任何地方都有写权限时,我该怎么做?

文件显然打包在jar(或类路径)中:这是指资源

如果您使用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()


适当地删除它。

文件显然打包在jar(或类路径)中:这意味着资源

如果您使用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()


适当地删除它。

如果可能,我会将该文件放在文件系统的某个位置,而不是放在jar中。这将使客户端代码(您的C程序)更容易理解。jar中的一个文件很可能是内部文件(jar的开发人员可能不知道这个资源被其他人使用,导致他们重命名或删除这个文件,而不考虑涉及的其他代码)。它还可以使文件的更新更容易(您不需要发布模块来更新配置文件)。这将使客户端代码(您的C程序)更容易理解。jar中的一个文件很可能是内部文件(jar的开发人员可能不知道这个资源被其他人使用,导致他们重命名或删除这个文件,而不考虑涉及的其他代码)。它还可以使文件更新更容易(您不需要释放模块来更新配置文件)。没问题,
文件
有一些很好的实用功能。没问题,
文件
有一些很好的实用功能。