对操作文件也是在开发中常用的事情,下面对删除文件和文件夹下的文件做个笔记
1.删除文件
extern "C" JNIEXPORT int JNICALL
Java_com_xinrui_ndkapp_MainActivity_deletefile(JNIEnv *env, jobject instance, jstring str) {
const char *str_path = env->GetStringUTFChars(str, JNI_FALSE);//本地代码绝不能修改字符串的内容
if (strlen(str_path) == 0) {
LOGE("filepath length is 0");
return -1;
}
//"r" 以“只读”方式打开文件。只允许读取,不允许写入。文件必须存在,否则打开失败。
//"w" 以“写入”方式打开文件。如果文件不存在,那么创建一个新文件;如果文件存在,那么清空文件内容(相当于删除原文件,再创建一个新文件)。
//"a" 以“追加”方式打开文件。如果文件不存在,那么创建一个新文件;如果文件存在,那么将写入的数据追加到文件的末尾(文件原有的内容保留)。
//"r+" 以“读写”方式打开文件。既可以读取也可以写入,也就是随意更新文件。文件必须存在,否则打开失败。
//"w+" 以“写入/更新”方式打开文件,相当于w和r+叠加的效果。既可以读取也可以写入,也就是随意更新文件。如果文件不存在,那么创建一个新文件;如果文件存在,那么清空文件内容(相当于删除原文件,再创建一个新文件)。
//"a+" 以“追加/更新”方式打开文件,相当于a和r+叠加的效果。既可以读取也可以写入,也就是随意更新文件。如果文件不存在,那么创建一个新文件;如果文件存在,那么将写入的数据追加到文件的末尾(文件原有的内容保留)。
FILE *file = fopen(str_path, "rw");
if (file==NULL) {
LOGE("Fail to open file!");
} else {
LOGE("suc to open file!");
remove(str_path);
}
if(file!=NULL){
fclose(file);
fflush(file);
}
env->ReleaseStringUTFChars(str, str_path);
return 0;
}
2.删除文件夹下的文件
extern "C" JNIEXPORT int JNICALL
Java_com_xinrui_ndkapp_MainActivity_deletefolder(JNIEnv *env, jobject instance,
jstring fileFolder) {
const char *file_folder = env->GetStringUTFChars(fileFolder, 0);
struct dirent *file;
char szFileName[128];
char szFolderName[128];
strcpy(szFolderName, file_folder);
strcat(szFolderName, "/%s");
DIR *pDir = opendir(file_folder);
if (pDir==NULL) {
LOGE("can not open dir,check path or permission!");
return -1;
}
// 遍历文件夹并删除文件
while ((file = readdir(pDir)) != NULL) {
//判断是不是 . 或者 .. 文件夹 ==0 是 !=0 则不是
if (strcmp(file->d_name, ".") != 0 && strcmp(file->d_name, "..") != 0) {
if (file->d_type != DT_DIR) {//文件
//拼接文件名称
sprintf(szFileName, szFolderName, file->d_name);
remove(szFileName);
} else {
//是文件夹则遍历
//构建文件夹路径
char *path = new char[256];
memset(path, 0, 256);
strcpy(path, file_folder);
strcat(path, "/");
strcat(path, file->d_name);
jstring tDir = env->NewStringUTF(path);
//读取指定文件夹
Java_com_xinrui_ndkapp_MainActivity_deletefolder(env, instance, tDir);
//释放文件夹路径内存
free(path);
}
}
}
if (pDir != NULL) {
remove(file_folder);//删除文件夹
closedir(pDir);
}
env->ReleaseStringUTFChars(fileFolder, file_folder);
return 0;
}