java实现pc机上文件的查找

文件查找可以说是一个常用操作,下面来介绍一下文件查找的思路。

1.文件名的匹配,需要用到Pattern类和Matcher对象来完成正则表达式的匹配。

2.文件的树状层次结构需要用递归算法来查找。

3.文件的输出结果需要用文件输出流输出到硬盘的一个文件上。

1.Pattern类和Matcher对象的使用

如果使用了第版本的eclipse,可能无法找到Pattern类的complie方法,如下:


原因是eclipse的版本太低!打开eclipse安装目录下的readme文件,当前版本是:

换了个高版本的eclipse可以解决问题。

关于正则表达式,读者可以查找相关的文档,在此不再赘述。

项目中要匹配某文件结尾的几个字符,因此正则表达式可以这样写:Pattern pattern = Pattern.compile("^*.mp3$",Pattern.CASE_INSENSITIVE);

compile的第一个参数填写正则表达式,^*.mp3$是以.mp3结尾的意思,如果需要查找多种文件类型,可以用 | 符号隔开(如:“A|B”是即满足A又满足B的意思);第二个参数填写匹配的一些规则,CASE_INSENSITIVE的意思是不区分大小写。

2.递归调用遍历整个文件

public static void findFiles(String string){
File file = new File(string);
if(file.isFile()){//叶节点
输出文件
}

否则读取文件夹中的每个文件,并对每个文件进行findFiles操作。
}

3.文件的输出流操作

第一步:新建一个文件

File file = new File("H:/newfile.txt");读者可以根据自己计算机上的分盘情况自行更改

第二步:新建一个指向该文件的文件输出流

fop = new FileOutputStream(file);

第三步:对文件流进行读和刷新操作

   fop.write(inBytes);
   fop.flush();

第四步:关闭文件流

  fop.close();     

对于文件流的创建和关闭操作需要添加响应的异常处理。

还有一点要主要,如果要输出换行符,须在string后面加上“/r/n”(回车换行)!

好了,所有的步骤都介绍完,下面是完整的代码:

package pattern;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class hello {

	static FileOutputStream fop=null;
	public static void main(String[] args) {
		File xx=new File("D:");
		try {
			File file = new File("H:/newfile.txt");
			fop = new FileOutputStream(file);
		} catch (Exception e) {
			System.out.println("打开文件出错!");
		}
		String [] gg=xx.list();
		for(int i=0;i<gg.length;i++){
			findFiles("D:"+"/"+gg[i]);
		}
		try {
			fop.close();
		} catch (IOException e) {
			e.printStackTrace();
			System.out.println("文件关闭错误!");
		}
	}
	
	//string为当前文件的字符串
	public static void findFiles(String string){
		File file = new File(string);
		try {
			if(file.isFile()){//叶节点
				//输出
				if(accept(string)){
					System.out.println(string);
					string = string+"\r\n"; //加换行符
					byte[] inBytes = string.getBytes();
					
					try {
						fop.write(inBytes);
						fop.flush();
					} catch (Exception e) {
						e.printStackTrace();
						System.out.println("文件写入错误!");
					}
				}
			}
			
			String[] strings = file.list();
			for(int i=0;i<strings.length;i++){//遍历以string为路径中的每个文件
				String currentString=string+"/"+strings[i];
				File currentFile = new File(currentString);
				findFiles(currentString);
			}
		} catch (Exception e) {
			return;
		}
	}
	public static boolean accept(String string){
		Pattern pattern = Pattern.compile("^*.mp3$",Pattern.CASE_INSENSITIVE);
		Matcher matcher = pattern.matcher(string);
		if(matcher.find())
			return true;
		return false;
	}

}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值