JNI 文件读写

来源:互联网 发布:linux df产生文件 编辑:程序博客网 时间:2024/06/09 21:30

对于只要入门了的Java工程师,写一个文件读写的功能是相当的简单,但是通过JNI进行文件的读写,相信有很多人都没去做过。当然对于JNI入门了的开发人员来说,这只是小菜一碟而已。

今天我也来试试JNI如何实现文件读写:

首先在java类中写一个native 方法: 

public native  void readAndWriteFile(String srcPath, String targetPath);

然后在CMD中 将路径切换到当前java工程src目录下并执行javah命令生成头文件,如果有生成好的头文件,可以自己手写就可以了:

例如 :     E:\myproject\JNIDemo\src>javah -classpath  E:\myproject\JNIDemo\bin   -d E:/ -jni com.demo.jni.Demo01  


生成头文件后将头文件、java JDK bin目录下的 jni.h 和jni_md.h拷贝到已经visual studio c++工程的目录下,导入已有项,将头文件中报错的部分处理掉,就可以开始写C代码了

JNIEXPORT void JNICALL Java_com_demo_jni_Demo01_readAndWriteFile(JNIEnv * env, jobject jobj, jstring src, jstring target){//因为c的fopen函数对应的路径参数必须是char类型的,所以卫门需要将jstring 转换为 char,因为在JNI中jChar == char所以调用//GetStringUTFChars函数即可。char * c_src = (*env)-> GetStringUTFChars(env, src, NULL);char * c_target = (*env) -> GetStringUTFChars(env, target, NULL);FILE * rf = fopen(c_src, "rb");FILE * wf = fopen(c_target, "wb");char buff [50];int len;while(len = fread(buff, sizeof(char), 50 , rf) !=0){fwrite(buff, sizeof(char) , len , wf)}fclose(wf);fclose(rf);(*env) -> ReleaseStringUTFChars(env, src, c_src); //通知JVM释放内存(*env) -> ReleaseStringUTFChars(env, target, c_target); //通知JVM释放内存}
c写完后使用 visual studio 生成dll文件。

public class Demo01{public native void readAndWriteFile(String srcPath, String targetPath);static{system.load("E:/xxx/xxx/xxx.dll");}public static void main(String [] args){Demo01 demo = new Demo01();String srcPath = "E:/xxx/xxx/srcName.jpg";String targetPath = "E:/xxx/xxx/targetName.jpg"demo.readAndWriteFile(srcPath , targetPath);}}

运行java工程,文件读写成功!!!


原创粉丝点击