在一次考试中的一题java编程题

题目:查找一个目录下(包括子目录)的txt文件,统计txt文件里面每个单词出现的个数(以空格区分单词)

我的编程思路:1、搜索目录下所有文件(递归算法)

       2、判断文件是否.txt 

       3、读取.txt文件,获取.txt文件里面的字符,采用split取出每个单词统计单词个数 

程序花了2个多小时,呵呵,以后还待提高!!

程序还不够完善,例如:如果遇到中文问题、单词换行了等问题还有待解决。

 

package com.tencent;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

/**
 * 题目:查找一个目录下(包括子目录)的txt文件,统计txt文件里面每个单词出现的个数(以空格区分单词)
 * 思路:
 * 1、搜索目录下所有文件(递归算法)
 * 2、判断文件是否.txt
 * 3、读取.txt文件,获取.txt文件里面的单词,统计单词个数
 * 
 * @author sam
 * 
 */
public class SearchTextOfWord {
	
	private final static String directory = "E:\\";
	
	//将单词存储在Map里面(key存储单词 value存储单词的个数)
	private Map<String, Integer> worlds = new HashMap<String, Integer>(); 
	
	//1、收集目录下所有txt文件(递归算法)
	public void getAllTxt(String directory) throws Exception {
		
		File file = new File(directory);
		
		if(file.canRead()) {
			File[] files = file.listFiles();
			for(int i=0; i<files.length; i++) {
				if(files[i].isDirectory()) {
					getAllTxt(files[i].getAbsolutePath());
				} else {
					String fileName = files[i].getName();
					String fileType = "";
					int index = fileName.indexOf(".");
					if(index != -1) {
						fileType = fileName.substring(index);
					}
					if(fileType.equals(".txt")) {
						System.out.println(files[i].getAbsolutePath());
						readTxt(files[i].getAbsolutePath());
					} 
				}
			}
		}
	}
	
	//2、对每个txt文件进行迭代,读取每个txt文件
	public void readTxt(String txtDir) throws Exception {
		BufferedReader br = new BufferedReader(new FileReader(txtDir));
		String line = br.readLine();
		
		while(line != null) {
			findWorld(line);
			line = br.readLine();
		}
		
	}
	
	//解决多空格造成的错误
	public void findWorld(String world) {
		String[] worlds = null;
		if(world != null && !world.equals("") && !world.equals(" ")) {
			worlds = world.split(" ");
			if(worlds.length == 1) {
				updateWorld(worlds[0]);
				return;
			}
			for(int i=0; i<worlds.length; i++) {
				findWorld(worlds[i]);
			}
		}
	}
	
	//3、统计单词的个数
	public void updateWorld(String world) {
		if(worlds.get(world) == null) {
			worlds.put(world, new Integer(1));
		} else {
			int num = worlds.get(world);
			worlds.put(world, new Integer(num + 1));
		}
	}
	
	public static void main(String[] args) {
		SearchTextOfWorld stw = new SearchTextOfWorld();
		try {
			stw.getAllTxt(directory);
			Iterator it = stw.worlds.entrySet().iterator();
			while(it.hasNext()) {
				Map.Entry entry = (Map.Entry) it.next();
				System.out.println(entry.getKey() + "->" + entry.getValue());
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

posted @ 2010-10-20 22:54  李灿森  Views(922)  Comments(6Edit  收藏  举报