android用NDK在内存卡创建目录、文件并进行读写操作

来源:互联网 发布:adas哪个软件好 编辑:程序博客网 时间:2024/05/21 11:33

1.创建目录操作:

先判断要创建的目录是否存在,如果已经存在,返回状态0;如果没有存在,就创建该目录,正确执行创建目录操作就返回0,否则返回错误状态1.

char * workDir = "/sdcard/UltimatumTest/";if(0 == access(workDir,0)) {//目录存在return 0;} else{if(0 == mkdir(workDir,777)) {return 0;}else {return 1;}}


写入操作核心片段:

char * strtowrite = Jstring2CStr(env,strToWrite);//将Java字符串对象转变成C语言中的字符串数组FILE * file;char * workDir = "/sdcard/UltimatumTest/";//要读写的文件所在目录char *fileName = Jstring2CStr(env,inputFileName);//转换得到通过Java传来的文件文件名char *filePath = (char *)malloc(sizeof(char)*50);//申请动态内存strcat(filePath,workDir);strcat(filePath,fileName);//得到文件完整路径file = fopen(filePath,"a+");//如果文件存在就添加内容,如果文件不存在就创建新文件fputs(iteminfo,file);//写入操作fclose(file);//关闭文件流free(filePath);/释放动态内存,防止内存泄露return 0;正确 执行返回

所用到的讲Java字符串对象转变成C字符串的函数(注意这个函数有个缺陷,它不能转换空对象,也不能转换空字符串元素的对象):

char* Jstring2CStr(JNIEnv* env, jstring jstr) {char* rtn = NULL;jclass clsstring = (*env)->FindClass(env, "java/lang/String");jstring strencode = (*env)->NewStringUTF(env, "GB2312");jmethodID mid = (*env)->GetMethodID(env, clsstring, "getBytes","(Ljava/lang/String;)[B");jbyteArray barr = (jbyteArray)(*env)->CallObjectMethod(env, jstr, mid,strencode); // String .getByte("GB2312");jsize alen = (*env)->GetArrayLength(env, barr);jbyte* ba = (*env)->GetByteArrayElements(env, barr, JNI_FALSE);if (alen > 0) {rtn = (char*) malloc(alen + 1); //"\0"memcpy(rtn, ba, alen);rtn[alen] = 0;}(*env)->ReleaseByteArrayElements(env, barr, ba, 0); //释放内存return rtn;}


要包含的头文件列表:

#include <sys/types.h>#include <sys/stat.h>#include <dirent.h>#include "com_example_ultimatumgame_GoldenWriter.h"

最后,也是最容易忽略的,在配置文件里加上对外存的读写权限:

 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>




0 1
原创粉丝点击