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工程,文件读写成功!!!
阅读全文
1 0
- JNI 文件读写
- android jni 读写资源文件(assets)
- android jni 读写资源文件:assets
- JNI中新建文件、读写普通文件和驱动文件的方法综述fopen/open/creat/
- android JNI之C 语言回顾:文件的读写和随机数函数
- 文件读写、剪贴板读写
- JNI:jni.h 头文件
- 读写文件
- 文件读写
- 读写文件
- 读写文件
- 文件读写
- 读写文件
- 读写文件
- 读写文件
- 文件读写
- 文件读写
- 文件读写
- Ext JS 和DOM
- 深入浅出 GAN·原理篇文字版(完整)| 干货
- DataFrame通过sklearn做数据预处理
- java数据结构与算法-图简介、图搜索、图最小生成树
- Android的Activity Window和View三者之间的关系解析
- JNI 文件读写
- 大型网站技术架构(二)--架构模式
- leetcode 118. Pascal's Triangle(杨辉三角)
- spring静态代理 动态代理
- swift 定时器的启用
- Triangle
- 小型购物系统
- 项目管理——产品文档规划
- 交通运输线