是否可以实现JNI在DLL中使用C ++类将文件写入磁盘?

时间:2016-01-17 06:38:03

标签: java c++ dll io java-native-interface

我编写了一个C ++类(例如JsonWriter),它使用RapidJson C ++库API将格式化的JSON文件写入磁盘。我想在Java Web解决方案中使用此类来使用JNI执行相同的操作。

我尝试将JsonWriter用于此目的,将其编译为DLL文件,其中包含必要的JNI包含和.cpp以及随附的.h文件,Java类可以在运行时使用这些文件与JsonWriter的方法进行交互。

不幸的是,当我使用部署的DLL运行我的Java Web解决方案并调用JsonWriter的方法时,没有JSON文件被写入磁盘。我知道我的Java应用程序正在加载并正确使用DLL中的类,因为DLL中的C ++类正在输出调试语句并将值返回给使用它们的Java类。但是,调用JsonWriter将Json文件写入磁盘时不会写入它并且我也没有错误。

是否无法使用JNI调用DLL中的C ++类将文件写入磁盘?

1 个答案:

答案 0 :(得分:0)

我无法想象是这样的。一旦调用DLL,就可以有效地调用不受JVM控制的本机代码。我的猜测是用户无法访问DLL尝试写入的目录。 IOW,我更快地假设文件系统上的权限问题。

至于没有收到错误,您是否正在调用Windows GetLastError函数?如果出于某种原因JNI实际上是在阻止它,我不得不相信C ++仍然会出错,因为它是本机代码并且在JVM域之外。