android ndk 文件管理,android NDK开发文件列表

NDK开发一开始接触的就是官方给的demo:HelloJni

不过里面的代码相当简单啦,然后我想写一个C语言来遍历手机的文件夹,然后android展示出来,功能就是这样了。

首先要去解决的问题就是怎么遍历;然后遇到的问题就是怎么把遍历出来的文件列表返回给android代码,直接贴代码吧int total = 0;

char filePaths[100][256] = {""};void searchdir(const char *path, const char *tempPath) {

DIR *dp;

struct dirent *dmsg;

if ((dp = opendir(path)) != NULL) {

chdir(path);

while ((dmsg = readdir(dp)) != NULL) {

if (!strcmp(dmsg->d_name, ".") || !strcmp(dmsg->d_name, "..")) {

continue;

}if (dmsg->d_type == DT_DIR) {

char *filePath = malloc(strlen(tempPath) + strlen(dmsg->d_name) + 20);

strcpy(filePath, tempPath);

strcat(filePath, "/");

strcat(filePath, dmsg->d_name);

searchdir(dmsg->d_name, filePath);

free(filePath);

} else {

int size = strlen(dmsg->d_name);

if (strcmp(dmsg->d_name + (size - 4), ".mp3") == 0) {

char *filePath = malloc(strlen(tempPath) + strlen(dmsg->d_name) + 20);

strcpy(filePath, tempPath);

strcat(filePath, "/");

strcat(filePath, dmsg->d_name);

strcpy(filePaths[total], filePath);

free(filePath);

total++;

}}}chdir("..");

closedir(dp);

}}

以上是遍历手机的方法,其中,if (strcmp(dmsg->d_name + (size - 4), ".mp3") == 0)这个判断是,只选择mp3文件。二维数组filePaths,是存放所有遍历结果

执行完这个方法后,就是要把结果传回去的过程了jobjectArray  Java_com_example_hellojni_HelloJni_stringFromJNI(JNIEnv* env, jobject thiz) {

total = 0;

clock_t tick_start, tick_end;

double t;

char *dirpath = "/storage/emulated/0/";

tick_start = clock();

searchdir(dirpath, dirpath);

tick_end = clock();

double dtime = (double) (tick_end - tick_start) / CLOCKS_PER_SEC;

jclass objClass = (*env)->FindClass(env, "java/lang/String");

jobjectArray texts = (*env)->NewObjectArray(env, (jsize) ARRAY_LENGTH, objClass, 0);

jstring jstr;

int i = 0;

for (; i < ARRAY_LENGTH; i++) {

jstr = (*env)->NewStringUTF(env, filePaths[i]);

(*env)->SetObjectArrayElement(env, texts, i, jstr); //必须放入jstring

}return texts;

}

其中变量dtime就是花费的时间,经过我的实验,C遍历时间比java要快很多,我扫描3k个文件夹,C花费3s左右,java花了20多s.

变量dirpath是我写死的扫描初始路径,应该因人而异,也可以由java那边传参数过来。

C这边就算是写完了!

java这边用String[] aa = stringFromJNI();接收下就可以了.

下一篇文章,我会分享下,java获取MP3文件的作者,专辑等信息遇到的乱码问题,两篇文章使用的是一个项目

地址:http://download.csdn.net/detail/xiaodousa/9618128

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值