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

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

#include

#include

#include "com_example_ultimatumgame_GoldenWriter.h"

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值