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

你可能感兴趣的:(android NDK开发文件列表)