java 递归搜索文件_Java递归搜索指定文件夹下的匹配文件

import java.io.File;

import java.util.ArrayList;

import java.util.List;

import java.util.Queue;

/**

* @author tiwson 2010-06-02

*

*/

public class FileSearcher {

/**

* 递归查找文件

* @param baseDirName 查找的文件夹路径

* @param targetFileName 需要查找的文件名

* @param fileList 查找到的文件集合

*/

public static void findFiles(String baseDirName, String targetFileName, List fileList) {

/**

* 算法简述:

* 从某个给定的需查找的文件夹出发,搜索该文件夹的所有子文件夹及文件,

* 若为文件,则进行匹配,匹配成功则加入结果集,若为子文件夹,则进队列。

* 队列不空,重复上述操作,队列为空,程序结束,返回结果。

*/

String tempName = null;

//判断目录是否存在

File baseDir = new File(baseDirName);

if (!baseDir.exists() || !baseDir.isDirectory()){

System.out.println("文件查找失败:" + baseDirName + "不是一个目录!");

} else {

String[] filelist = baseDir.list();

for (int i = 0; i < filelist.length; i++) {

File readfile = new File(baseDirName + "\\" + filelist[i]);

//System.out.println(readfile.getName());

if(!readfile.isDirectory()) {

tempName = readfile.getName();

if (FileSearcher.wildcardMatch(targetFileName, tempName)) {

//匹配成功,将文件名添加到结果集

fileList.add(readfile.getAbsoluteFile());

}

} else if(readfile.isDirectory()){

findFiles(baseDirName + "\\" + filelist[i],targetFileName,fileList);

}

}

}

}

/**

* 通配符匹配

* @param pattern 通配符模式

* @param str 待匹配的字符串

* @return 匹配成功则返回true,否则返回false

*/

private static boolean wildcardMatch(String pattern, String str) {

int patternLength = pattern.length();

int strLength = str.length();

int strIndex = 0;

char ch;

for (int patternIndex = 0; patternIndex < patternLength; patternIndex++) {

ch = pattern.charAt(patternIndex);

if (ch == '*') {

//通配符星号*表示可以匹配任意多个字符

while (strIndex < strLength) {

if (wildcardMatch(pattern.substring(patternIndex + 1),

str.substring(strIndex))) {

return true;

}

strIndex++;

}

} else if (ch == '?') {

//通配符问号?表示匹配任意一个字符

strIndex++;

if (strIndex > strLength) {

//表示str中已经没有字符匹配?了。

return false;

}

} else {

if ((strIndex >= strLength) || (ch != str.charAt(strIndex))) {

return false;

}

strIndex++;

}

}

return (strIndex == strLength);

}

public static void main(String[] paramert) {

// 在此目录中找文件

String baseDIR = "d:/file";

// 找扩展名为txt的文件

String fileName = "*.txt";

List resultList = new ArrayList();

FileSearcher.findFiles(baseDIR, fileName, resultList);

if (resultList.size() == 0) {

System.out.println("No File Fount.");

} else {

for (int i = 0; i < resultList.size(); i++) {

System.out.println(resultList.get(i));//显示查找结果。

}

}

}

}

本文转自:http://tiwson.iteye.com/blog/681888

JAVA 遍历文件夹下的所有文件&lpar;递归调用和非递归调用&rpar;

JAVA 遍历文件夹下的所有文件(递归调用和非递归调用) 1.不使用递归的方法调用. public void traverseFolder1(String path) { int fileNum = ...

Java遍历一个文件夹下的全部文件

Java工具中为我们提供了一个用于管理文件系统的类,这个类就是File类,File类与其它流类不同的是,流类关心的是文件的内容.而File类关心的是磁盘上文件的存储. 一,File类有多个构造器,经常 ...

用Java实现将多级文件夹下的所有文件统一放到一个文件夹中

每次下了电影(男生懂得呦),每部电影都放在一个单独的文件夹里,看的时候很是不方便啊,一直重复着进入文件夹.后退,再进.再退的操作,而手动把这些电影全部复制出来又太繁琐.因此为了解决这个问题,用IO写了 ...

Java基础面试操作题: File IO 文件过滤器FileFilter 练习 把一个文件夹下的&period;java文件复制到另一个文件夹下的&period;txt文件

package com.swift; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File ...

JAVA 遍历文件夹下的所有文件

JAVA 遍历文件夹下的所有文件(递归调用和非递归调用) 1.不使用递归的方法调用. public void traverseFolder1(String path) { int fileNum = ...

Java遍历文件夹下的所以文件

利用Java递归遍历文件夹下的所以文件,然后对文件进行其他的操作.如:对文件进行重命名,对某一类文件进行重编码.可以对某一工程下的全部.java文件进行转码成utf-8等 代码如下,这里只对文件进行重 ...

java 删除文件夹 &sol; 删除某文件夹下的所有文件

import java.io.File; /*************************删除文件夹delFolder / 删除文件夹中的所有文件delAllFile *start******** ...

C&num;实现把指定文件夹下的所有文件复制到指定路径下以及修改指定文件的后缀名

1.实现把指定文件夹下的所有文件复制到指定路径下 public static void copyFiles(string path) { DirectoryInfo dir = new Directo ...

递归输出文件夹下的所有文件的名称(转自 MSDN)

问题:如何输出给定文件夹目录下面的所有文件的名称? C#代码: using System; using System.IO; namespace MyTest { public class Progr ...

随机推荐

go语言指针符号的&ast;和&amp&semi;

先看一段代码 先放一段代码,人工运行一下,看看自己能做对几题? package main import "fmt" func main() { var a int = 1 var ...

流媒体相关知识介绍 及其 RTP 应用

一.流媒体简介 随着Internet的日益普及,在网络上传输的数据已经不再局限于文字和图形,而是逐渐向声音和视频等多媒体格式过渡.目前在网络上传输音频/视频(Audio/Video,简称A/V)等多媒 ...

Java基础知识强化之集合框架笔记16:List集合的特有功能概述和测试

1. List集合的特有功能概述: (1)添加功能: void add(int index, Object element):在指定位置添加元素 (2)获取功能: Object get(int ind ...

Oracle数据库中直方图对执行计划的影响

在Oracle数据库中,CBO会默认目标列的数据在其最小值low_value和最大值high_value之间均匀分布,并按照均匀分布原则,来计算目标列 施加查询条件后的可选择率以及结果集的cardin ...

windows 安装memchched和memcache教程

Memcached是一个内存缓存系统,而Memcache是php的一个扩展,是php用于操作和管理Memcached的工具.如果安装了Memcached但没有安装Memcache,php无法操控Mem ...

权限系统&lpar;RBAC&rpar;的数据模型设计

前言: RBAC是Role-Based Access Control的缩写, 它几乎成为权限系统的数据模型的选择标配. 之前写个两篇关于权限系统的文章, 主要涉及如何在应用中实现权限控制, 对权限系统 ...

jquery-序列化表单

createTime--2016年9月25日08:54:48参考链接:http://www.w3school.com.cn/tags/html_ref_urlencode.htmljQuery的s ...

如何阅读jdk及开源框架的源码?

1.熟悉设计模式 可以边读源码 ,边熟悉设计模式,理解编程思想. jdk中对应的设计模式见:http://blog.csdn.net/gtuu0123/article/details/6114197 ...

编程大牛 Bruce Eckel 对新程序员的忠告

简评:作者 Bruce Eckel 是编程界的大牛,著有大名鼎鼎的和.本文是他对程序员(尤其是新手)的忠告 ...

leetcode 之trap water(8)

这题不太好想.可以先扫描找到最高的柱子,然后分别处理两边:记录下当前的局部最高点,如果当前点小于局部最高点,加上, 反则,替换当前点为局部最高点. int trapWater(int A[], int ...

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值