在一次考试中的一题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();

		}

	}



}



你可能感兴趣的:(java编程)