java--

1.题目

1) 查找一个目录下,所有文件中数字、字母(大小写不区分)、汉字、空格的个数、行数。
2) 将结果数据写入到文件中。
文件格式如下:
数字:198213个
字母:18231个
汉字:1238123个
空格:823145个
行数:99812行


数字0:123个
数字1:1214个
数字2:23423个
……
字母A:754456个
数字B:7567个
数字C:456456个

MyFile.java

package org.sh.countingall;

public class MyFile {
	public String name;
	private int num;// 数字的个数
	private int zimu;// 字母个数
	private int hang;// 行数
	private int kongge;// 空格数
	private int hanzi;
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getNum() {
		return num;
	}

	public void setNum(int num) {
		this.num = num;
	}

	public int getZimu() {
		return zimu;
	}

	public void setZimu(int zimu) {
		this.zimu = zimu;
	}

	public int getHang() {
		return hang;
	}

	public void setHang(int hang) {
		this.hang = hang;
	}

	public int getKongge() {
		return kongge;
	}

	public void setKongge(int kongge) {
		this.kongge = kongge;
	}

	public int getHanzi() {
		return hanzi;
	}

	public void setHanzi(int hanzi) {
		this.hanzi = hanzi;
	}
}

ReadFile.java

package org.sh.countingall;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.Writer;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 统计: 1) 查找一个目录下,所有文件中数字、字母(大小写不区分)、汉字、空格的个数、行数。 2) 将结果数据写入到文件中。 文件格式如下:
 * 数字:198213个 字母:18231个 汉字:1238123个 空格:823145个 行数:99812行
 * 数字0:123个 数字1:1214个 数字2:23423个 …… 字母A:754456个 数字B:7567个 数字C:456456个
 * 
 * @author Administrator
 * 
 */
public class ReadFile {
	public static List<MyFile> fList = new ArrayList<MyFile>();
	public static Map<Character, Integer> CharMap = new HashMap<Character, Integer>();
	public static Map<Integer, Integer> IntMap = new HashMap<Integer, Integer>();
	public static Map<Character, Integer> HZMap = new HashMap<Character, Integer>();

	private static void GetFile(String path) {
		File fileDir = new File(path);
		computeFile(fileDir);
	}

	private static void computeFile(File fileDir) {
		if (fileDir.isDirectory()) {
			File[] fArray = fileDir.listFiles();
			for (File f : fArray) {
				if (f.isDirectory()) {
					computeFile(f);
				} else {
					try {
						calculate(f);
					} catch (Exception e) {
						e.printStackTrace();
					}
				}
			}
		}
	}

	private static void calculate(File f) throws Exception {
		int ch = 0;
		int count = 0;// 数字
		int j = 0;// 字母
		int i = 0;// 行数
		int k = 0;// 空格
		int h = 0;// 汉字
		FileInputStream fis = new FileInputStream(f);
		BufferedReader br = new BufferedReader(new FileReader(f));
		while ((ch = fis.read()) != -1) {
			if ('0' <= ch && ch <= '9') {
				count++;
				// 统计每一个数字出现的次数
				int index = ch - 48;
				if (IntMap.get(index) == null) {
					IntMap.put(index, 1);
				} else {
					int value = IntMap.get(index);
					IntMap.put(index, value + 1);
				}
			}
			if (('a' <= ch && ch <= 'z') || (ch >= 'A' && ch <= 'Z')) {
				j++;
				// 统计每个字母出现的次数
				char c = (char) ch;
				if (CharMap.get(c) == null) {
					CharMap.put(c, 1);
				} else {
					int value = CharMap.get(c);
					CharMap.put(c, value + 1);
				}

			}
			if (ch == ' ') {
				k++;
			}
			/*
			 * if ((char)ch >= 19968 && (char)ch <= 171941) {// 统计汉字 h++; }
			 */
		}
		String str = null;
		while ((str = br.readLine()) != null) {
			System.out.println(str);
			for (int K = 0; K < str.length(); K++) {
				int n = (int) str.charAt(K);
				// System.out.println("n:"+n+",neirong:"+str.charAt(K));
				if ((19968 <= n && n < 40623)) {
					h++;
					System.out.println("*********" + (char) n);
					char ch1 = (char) n;
					if (HZMap.get(ch1) == null) {
						HZMap.put(ch1, 1);
					} else {
						int value = HZMap.get(ch1);
						HZMap.put(ch1, value + 1);
					}
				}
			}
			i++;// 行数
		}
		fis.close();
		br.close(); 
		MyFile mf = new MyFile();
		mf.setName(f.getName());
		mf.setNum(count);
		mf.setZimu(j);
		mf.setHanzi(h);
		mf.setHang(i);
		mf.setKongge(k);
		fList.add(mf);
	}

	public static void Print() {
		for (MyFile f : fList) {
			System.out.println(f.getName() + ": ,data:" + f.getNum()
					+ " ,character:" + f.getZimu() + " ,hangshu:" + f.getHang()
					+ " ,kongge:" + f.getKongge() + ",hanzi:" + f.getHanzi());
		}
		System.out.println("=============各个数字出现的次数-================");
		Set<Integer> set = IntMap.keySet();
		Iterator<Integer> iter = set.iterator();
		while (iter.hasNext()) {
			int key = iter.next();
			System.out.println("key:" + key + "value:" + IntMap.get(key));
		}

		System.out.println("=============各个数字母出现的次数-================");
		Set<Character> set1 = CharMap.keySet();
		Iterator<Character> iter1 = set1.iterator();
		while (iter1.hasNext()) {
			char key1 = iter1.next();
			System.out.println("key:" + key1 + ",value:" + CharMap.get(key1));
		}

		System.out.println("=============各个中文出现的次数-================");
		Set<Character> set2 = HZMap.keySet();
		Iterator<Character> iter2 = set2.iterator();
		while (iter2.hasNext()) {
			char key2 = iter2.next();
			System.out.println("key:" + key2 + ",value:" + HZMap.get(key2));
		}
	}

	public static void save(String pathName) throws Exception {
		if (pathName == null) {
			return;
		}
		File file = new File(pathName);
		Writer out = null;
		out = new FileWriter(file);
		int numSum = 0;
		int zmSum = 0;
		int kgSum = 0;
		int hzSum = 0;
		int khSum = 0;
		for (int i = 0; i < fList.size(); i++) {
			numSum += fList.get(i).getNum();
			zmSum += fList.get(i).getZimu();
			kgSum += fList.get(i).getKongge();
			hzSum += fList.get(i).getHanzi();
			khSum = fList.get(i).getHang();
		}
		String nsStr = "数字出现了" + numSum + "次";
		String zmStr = "\r\n字母出现了" + zmSum + "次";
		String kgStr = "\r\n空格出现了" + kgSum + "次";
		String hzStr = "\r\n汉字出现了" + hzSum + "次";
		String szStr = "\r\n数字出现了" + khSum + "次\r\n";
		out.write(nsStr);
		out.write(zmStr);
		out.write(kgStr);
		out.write(hzStr);
		out.write(szStr);
		Iterator<Character> iter = null;
		Iterator<Integer> iter1 = null;
		iter = CharMap.keySet().iterator();
		while (iter.hasNext()) {
			char c = iter.next();
			String str = "\r\n字母" + c + ":" + CharMap.get(c) + "个";
			out.write(str);
		}
		out.write("\r\n");
		iter1 = IntMap.keySet().iterator();
		while (iter1.hasNext()) {
			int c = iter1.next();
			String str = "\r\n数字" + c + ":" + IntMap.get(c) + "个";
			out.write(str);
		}
		out.write("\r\n");
		iter = HZMap.keySet().iterator();
		while (iter.hasNext()) {
			char c = iter.next();
			String str = "\r\n汉字:" + c + ":" + HZMap.get(c) + "个";
			out.write(str);
		}
		out.write("\r\n");
		out.close();
		System.out.println("文件已保存");
	}

	public static void main(String[] args) throws Exception {
		GetFile("D://haha");
		Print();
		save("D:" + File.separator + "cishu.txt");
	}
}
运行结果:
数字出现了19次
字母出现了6次
空格出现了20次
汉字出现了27次
数字出现了6次

字母a:4个
字母m:2个

数字1:7个
数字2:7个
数字3:5个

汉字:大:1个
汉字:路:1个
汉字:浩:2个
汉字:是:2个
汉字:题:1个
汉字:考:1个
汉字:涉:2个
汉字:干:2个
汉字:你:2个
汉字:天:1个
汉字:苏:2个
汉字:个:1个
汉字:在:2个
汉字:我:1个
汉字:么:2个
汉字:刷:1个
汉字:了:1个
汉字:两:1个
汉字:今:1个



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值