码迷,mamicode.com
首页 > 编程语言 > 详细

搜索文件或目录中包含字符串的文件 java小程序

时间:2014-06-24 17:19:12      阅读:324      评论:0      收藏:0      [点我收藏+]

标签:搜索jar中的包含字符串的类   搜索指定目录包含字符串的文件   搜索文件小工具   

package com.ruishenh.spring.test;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Enumeration;
import java.util.Scanner;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;

public class SearchFile {

	private static final int DEFAULT_BUF_SIZE = 64;
	
	private static int searchCount=0;

	public static void main(String[] args) throws IOException {

		String dir,searchStr = null;
		
		System.out.println("欢迎使用小侯查询文件java程序");
		
		while (true) {
			System.out.println("请输入查询目录:");
			Scanner sc = new Scanner(System.in);
			dir = sc.next();
			break;
		}
		while (true) {
			System.out.println("请输入查询的关键字:");
			Scanner sc = new Scanner(System.in);
			searchStr= sc.next();
			break;
		}
		System.out.println("查询中......");
		SearchFile sf = new SearchFile();
		sf.searchStrInFile(dir, searchStr, true);
		System.out.println("查询完毕......");
		System.out.println("查询到"+searchCount+"处.");

	}
	//查询字符从jar文件
	void searchStrInJar(String file, String searchStr, int buf) throws IOException {
		JarFile jf = new JarFile(new File(file));
		searchStrInJar(jf, searchStr, buf);
	}
	//查询字符从jar文件
	void searchStrInJar(JarFile jf,String searchStr, int buf) throws IOException {
		Enumeration<JarEntry> jss = jf.entries();
		InputStream in;
		while (jss.hasMoreElements()) {
			JarEntry je = jss.nextElement();
			in = jf.getInputStream(je);
			searchStrInInputStream(jf.getName()+"!/"+je.getName(), searchStr, buf, in);
		}
	}

	void searchStrInTxt(String file, String searchStr, int buf) throws IOException {
		searchStrInTxt(new FileInputStream(new File(file)),file, searchStr, buf);
	}
	
	//查询字符从普通文件
	void searchStrInTxt(InputStream is, String fileName,String searchStr, int buf) throws IOException {
		searchStrInInputStream(fileName, searchStr, buf, is);
	}
	//查询字符从指定InputStream
	private void searchStrInInputStream(String fileName, String searchStr, int buf, InputStream is) throws IOException{
		searchStrInBufferedReader(fileName, searchStr, buf, new BufferedReader(new InputStreamReader(is)));
	}
	private void searchStrInBufferedReader(String fileName, String searchStr, int buf, BufferedReader r) throws IOException {
		char[] blocks = new char[buf];
		int length = searchStr.length();
		if (buf < length) {
			throw new IOException("读取大小不能小于搜索字符串的长度");
		}
		String preStr = null;
		while (r.read(blocks) != -1) {
			String tempStr = new String(blocks);
			String tmpStr = (preStr + tempStr);
			if (null != tmpStr && tmpStr.indexOf(searchStr) > -1) {
				System.out.println(fileName + "---->" + tmpStr);
				searchCount++;
			}
			if (tempStr.length() > length) {
				preStr = tempStr.substring(tempStr.length() - length);
			} else {
				preStr = tempStr;
			}
		}
	}
	//查询字符从指定文件或目录
	void searchStrInFile(String dir, String searchStr, boolean recurse) {
		try {
			File d = new File(dir);
			if (!d.isDirectory()) {
				return;
			}
			File[] files = d.listFiles();
			for (int i = 0; i < files.length; i++) {
				if (recurse && files[i].isDirectory()) {
					searchStrInFile(files[i].getAbsolutePath(), searchStr, true);
				} else {
					String filename = files[i].getAbsolutePath();
					if (filename.endsWith(".jar")) {
						searchStrInJar(filename, searchStr, DEFAULT_BUF_SIZE);
					}
					if (filename.endsWith(".zip")) {
						searchStrInZip(filename, searchStr, filename);
					}
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	//查询字符从Zip文件
	private void searchStrInZip(String dir, String searchStr, String filename) throws IOException {
		ZipFile zip = new ZipFile(filename);
		Enumeration<? extends ZipEntry> entries = zip.entries();
		while (entries.hasMoreElements()) {
			ZipEntry entry = entries.nextElement();
			String currFile = entry.getName();
			if (entry.isDirectory()) {
				searchStrInFile(currFile, searchStr, true);
			} else {
				searchStrInInputStream(filename+File.separator+currFile, searchStr, DEFAULT_BUF_SIZE, zip.getInputStream(entry));
				
				//zip中的文件就不在做具体细化的操作
				
//				if (currFile.endsWith(".zip")) {
//					searchStrInZip(filename, searchStr,filename+File.separator+currFile);
//				} else if (currFile.endsWith(".jar")) {
//					searchStrInJar(new JarFile(zip.getInputStream(entry)), searchStr, DEFAULT_BUF_SIZE);
//				} else {
//					// 默认按照文本来做
//					searchStrInTxt(currFile, searchStr, DEFAULT_BUF_SIZE);
//				}
			}

		}
	}
}



运行效果:


bubuko.com,布布扣


搜索文件或目录中包含字符串的文件 java小程序,布布扣,bubuko.com

搜索文件或目录中包含字符串的文件 java小程序

标签:搜索jar中的包含字符串的类   搜索指定目录包含字符串的文件   搜索文件小工具   

原文地址:http://blog.csdn.net/ruishenh/article/details/34087589

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!