JAVA和C实现文件搜索(递归和文件过滤器)
来源:互联网 发布:php在线调试工具 编辑:程序博客网 时间:2024/05/17 23:59
public static void findFile(File allList,String endName,List<File> filenames){ FileFilter filefilter = new ExtensionFileFilter(endName); // 创建fileArray名字的数组 ,存储allList目录下的所有文件 File[] fileArray= allList.listFiles(); // 如果传进来一个以文件作为对象的allList 返回 if(null==fileArray){ return ; } File[] files = null; if((allList.getAbsolutePath().indexOf("sd")!=-1)||(allList.getAbsolutePath().indexOf("SD")!=-1)) { files = allList.listFiles(filefilter); if(files.length>0) { System.out.println("目录: "+files[0].getAbsolutePath()); filenames.add(files[0]);//找到所搜索文件,添加到存储器 } } // 偏历目录下的文件 for(int i=0;i<fileArray.length;i++){ // 如果是个目录 if(fileArray[i].isDirectory()){ String dir = fileArray[i].getAbsolutePath(); if(dir.length() - dir.replaceAll("/", "").length() > 3) break; findFile(fileArray[i].getAbsoluteFile(),endName,filenames); //递归 } } } public static class ExtensionFileFilter implements FileFilter { private String extension; public ExtensionFileFilter(String extension) { this.extension = extension; } public boolean accept(File file) { if(file.isDirectory( )) { return false; } String name = file.getName();// find the last return name.equals(extension);//搜索特定名称的文件 /*int index = name.lastIndexOf(".");//搜索特定后缀名文件 if(index == -1) { return false; }else if(index == name.length( ) -1) { return false; } else { return this.extension.equals(name.substring(index+1)); }*/ } } public static void getpath(){ String dir = "/"; File file = new File(dir); List<File> filenames = new ArrayList<File>(); findFile(file,"hello_sd.key",filenames); //File[] files = (File[]) filenames.toArray(); System.out.println("file:="+filenames.get(0));//打印搜索文件,filenames中存储找到的文件信息 }
需求一改,立马就得变换程序,orz,下面是用C实现搜索,无奈还是很笨啊
void FindFile(const char *dirName,char* desFileName, char* desPath){ DIR* dir = NULL; struct dirent *d_ent = NULL; struct stat sb;char currfile[1024]={0}; dir = (DIR*)opendir(dirName); if(dir == NULL) return; int i; while ( (d_ent = readdir(dir))!= NULL ) { if(strncmp(d_ent->d_name, ".", 1)==0 || strncmp(d_ent -> d_name,"",1) == 0) continue; sprintf(currfile,"%s/%s",dirName,d_ent->d_name); // LOGI("currfile=%s",currfile); // LOGI("d_ent->d_name = %s, desFileName = %s",d_ent->d_name,desFileName); stat(currfile, &sb); // LOGI("sb.st_nlink = %d",sb.st_nlink); if(S_ISDIR(sb.st_mode))//如果是目录文件,递归调用 { // LOGI("This is dir"); if(sb.st_nlink>=6) continue; FindFile(currfile,desFileName,desPath); }else if(strcmp(desFileName,d_ent->d_name) == 0)//是普通文件,比较是否是目标文件 { LOGI("desPath = %s",dirName); strncpy(desPath,dirName,strlen(dirName) + 1); break; } } closedir(dir);}
- JAVA和C实现文件搜索(递归和文件过滤器)
- java使用递归算法实现加载本地磁盘的文件目录和文件
- Java中递归实现复制文件夹和文件
- Qt实现遍历文件夹和文件目录(递归)
- Qt 实现遍历文件夹和文件目录(递归)
- Qt实现遍历文件夹和文件目录(递归)
- Qt 实现遍历文件夹和文件目录(递归)
- Qt实现遍历文件夹和文件目录(递归) .
- VC/MFC(C++)实现文件拷贝和文件删除等
- VC/MFC(C++)实现文件拷贝和文件删除等
- VC/MFC(C++)实现文件拷贝和文件删除等
- Java获取文件列表及其子文件目录和文件的非递归方法
- (C#)文件操作--解压文件夹和文件
- 文件操作总结-递归删除文件(文件下含有多级目录和文件)
- java文件操作整理(一)--递归删除目录和文件的程序
- 多线程实现文件备份和文件压缩
- NSURLSession实现文件下载和文件上传
- JAVA操作文件和文件目录
- Android 用户界面---操作栏(Action Bar 一)
- unique_copy的用法
- android启动--深入理解启动HOME
- 求两数的最大公约数
- struts2 dojo tree使用问题
- JAVA和C实现文件搜索(递归和文件过滤器)
- 函数对象
- vim之IDE之路
- 模块中存在多重定义的问题
- nandflash的读写操作
- J2SE 坦克大战 马士兵(1)
- Jsp学习——JavaBean技术
- 面试题-北京中体骏彩信息技术有限公司
- 获取build.prop中的指定属性