1.题目
ReadFile.java
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个