判断.java文件中getConnection与cleanUp数量是否匹配

需求:查找未关闭的数据库连接。

两步走:

1.将给定目录下的及子目录下的 所有的给定后缀名的文件路径存到集合中。

2.使用正则表达式对每个文件进行匹配。

package com.fanc.main;

import java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Search4NotMatch {

	/**
	 * 
	 * 深度遍历该父目录,将给定目录下的及子目录下的 所有的给定后缀名的文件路径存到集合中。(进行过滤)。
	 *
	 * 遍历集合对每个文件进行匹配,需求是判断每个文件中的getConnection和cleanUp数目是否相等
	 *
	 */
	public static void main(String[] args) {
		//指定目录
		String filePath = "你需要指定的目录";
		File dir = new File(filePath);
	
		ArrayList<File> path = new ArrayList<File>();

		writeToArr(dir,  path);

		Iterator<File> it = path.iterator();

		while (it.hasNext()) {

			File file = (File) it.next();
			if (!deal(file)) {

				System.out.println(file);
			}

		}

	}

	public static void writeToArr(File dir,
			ArrayList<File> al) {

		File[] files = dir.listFiles();
		for (File f : files) {
			if (f.isDirectory()) {
				// 递归 遍历父目录及其子目录
				writeToArr(f, al);
			} else {
				if (f.getName().endsWith(".java")) {
					al.add(f);
				}
			}
		}
	}

	// 判断.java文件中getConnection与cleanUp数量是否匹配
	public static boolean deal(File file) {

		String str = null;

		try {

			FileInputStream fis = new FileInputStream(file);

			byte[] content = new byte[fis.available()];

			fis.read(content);

			str = new String(content);

		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}

		int getConnectionNumber = 0;
		int cleanUpNumber = 0;

		Pattern p1 = Pattern.compile("getConnection");
		Pattern p2 = Pattern.compile("cleanUp");

		Matcher m1 = p1.matcher(str);
		Matcher m2 = p2.matcher(str);

		while (m1.find()) {
			getConnectionNumber++;
		}

		while (m2.find()) {
			cleanUpNumber++;
		}

		if (getConnectionNumber != cleanUpNumber) {
			return false;
		} else {
			return true;
		}
	}
}

  

posted @ 2015-03-27 15:23  煮烂饭城  阅读(264)  评论(0编辑  收藏  举报