我在使用 native 函数使用的相对文件路径时遇到问题。当我从 Java 代码调用 native C 函数时,由于空文件指针而出现段错误。唯一有效的方法是将这些路径更改为绝对文件路径,这对我来说不是解决方案。有没有办法为 native 函数设置根目录或使用Java项目根文件夹来浏览目录,或者绝对路径是唯一的方法?
最佳答案
Java does not have a way to change the working directory 。
这是因为 the Java developers consider changing the working directory to create more problems than it solves 。具体来说:
- 这将是全局可变状态。全局可变状态使得应用程序的各个部分彼此隔离变得更加困难。
- 这很容易出现竞争条件(全局可变状态的另一个副作用)。
- 它不会带来显着的好处。通过更改当前目录可以执行的所有操作都可以使用绝对路径执行。
您的 C 代码需要使用绝对路径。
或者,如果您愿意编写额外的 C 代码,您的 C 代码可以直接调用操作系统的 chdir
函数。这可能很危险,因为 JVM 并不是为这种可能性而设计的。
关于Java JNI接口(interface): Native functions relative file paths,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27698159/