Android JNI 删除文件和遍历文件夹并删除文件夹下的文件
2023-09-14 09:14:22 时间
对操作文件也是在开发中常用的事情,下面对删除文件和文件夹下的文件做个笔记
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;
}
相关文章
- android scaleanimation动画,【Android动画九章】-RotateAnimation(旋转动画)和ScaleAnimation(尺寸动画)…[通俗易懂]
- android中的加密算法,Android中加密算法[通俗易懂]
- android 安装p12证书,如何在Android中使用p12证书(客户端证书)
- android sdk根目录,Android SDK位置
- Android ANR分析(trace文件的产生流程)
- Android Camera2 Focus Distance
- 【Android 内存优化】图片文件压缩 ( Android 原生 API 提供的图片压缩功能能 | 图片质量压缩 | 图片尺寸压缩 )
- 【Android 安全】DEX 加密 ( Java 工具开发 | apk 文件对齐 )
- 【Flutter】手机应用类型 ( Android | iOS | Native 应用 | Web 应用 | Hybrid 应用 | ReactNative 应用 | Flutter 应用 )
- 【Android 文件管理】分区存储 ( 修改与删除图片文件 )
- 【Android 逆向】Android 系统文件分析 ( /proc/ 目录文件分析 | 记录系统和进程信息 | version 内核版本信息文件 )
- 【Android 逆向】Android 进程注入工具开发 ( 远程进程注入动态库文件操作 | 注入动态库 加载 业务动态库 | 业务动态库启动 | pthread_create 线程开发 )
- 【Android 逆向】ART 脱壳 ( DexClassLoader 脱壳 | exec_utils.cc 中执行 Dex 编译为 Oat 文件的 Exec 和 ExecAndReturnC函数 )
- 【错误记录】编译 Android 版本的 ijkplayer 报错 ( ./init-android.sh: 第 37 行: cd: android/contrib/: 没有那个文件或目录 )
- 【Android Gradle 插件】AaptOptions 配置 ⑤ ( AaptOptions#noCompress 压缩配置 )
- Android开发中遇到的问题(三)——eclipse创建android项目无法正常预览布局文件详解手机开发
- [android] android下文件访问的权限详解手机开发
- Android Topeka介绍详解手机开发
- 韩国 TmaxSoft 发布操作系统挑战微软,兼容 Android 和 iOS
- Android布局控件之LinearLayout详细介绍
- Android实现类似360,QQ管家那样的悬浮窗
- android实现蓝牙文件发送的实例代码,支持多种机型
- android读取sdcard路径下的文件的方法
- android动态加载布局文件示例
- java批量采集豌豆荚网站Android应用图标和包名
- Android触屏测试实例代码