JNI⽂件读写
对于只要⼊门了的Java⼯程师,写⼀个⽂件读写的功能是相当的简单,但是通过JNI进⾏⽂件的读写,相信有很多⼈都没去做过。当然对于JNI⼊门了的开发⼈员来说,这只是⼩菜⼀碟⽽已。
今天我也来试试JNI如何实现⽂件读写:system的头文件
⾸先在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"
}
}
运⾏java⼯程,⽂件读写成功

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。