思路:
1,新建一个文本文件
2,找到文件并读取字符
3,创建一个map集合保存数据
4,判断map集合是否包含该字符:包含值累加1,不包含存入值为1
5,得到统计结果
6,对map集合进行迭代获取统计结果,并生成文本文件
public class Test8 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//封装统计的文本文件
//建议使用相对路径
File countFile = new File("./src/cn/itcast/heima/count.txt");
File resultFile = new File("./src/cn/itcast/heima/count_result.txt");
//进行统计
TreeMap<Character, Integer> map = countMethod(countFile);
//根据统计结果生成文本文件
createFile(map,resultFile);
}
//编写统计方法进行统计,以map集合的形式返回统计的结果
public static TreeMap<Character, Integer> countMethod(File fileName){
//创建带缓冲的输入流
BufferedReader br = null;
//创建TreeMap集合用来存入统计结果
TreeMap<Character, Integer> resultMap = new TreeMap<Character,Integer>();
try {
br = new BufferedReader(new FileReader(fileName));
String line = null;
//每获取一行,就将该行内容转换为字符数组,遍历数组,存入集合
//若集合中包含当前的字符,对值进行累加,否则存入值为 1
while((line = br.readLine())!=null){
//转换为字符数组
char[] c = line.toCharArray();
for(int i=0;i<c.length;i++){
if(resultMap.containsKey(c[i])){
//包含键,对值进行累加
resultMap.put(c[i], resultMap.get(c[i])+1);
}else{
resultMap.put(c[i],1);
}
}
line=null;
}
System.out.println("统计已完成");
} catch (Exception e) {
// TODO: handle exception
System.out.println("统计失败");
e.printStackTrace();
} finally {
//关闭输入流
if(br!=null){
try {
br.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return resultMap;
}
//编写生成文本文件的方法,写入统计结果
private static void createFile(TreeMap<Character, Integer> map,File fileName) {
// TODO Auto-generated method stub
//创建输出流
BufferedWriter bw = null;
try {
bw = new BufferedWriter(new FileWriter(fileName));
//得到TreeMap的set集合
Set<Map.Entry<Character, Integer>> set = map.entrySet();
//生成一个迭代器
Iterator<Map.Entry<Character, Integer>> it = set.iterator();
while(it.hasNext()){
Map.Entry<Character, Integer> next = it.next();
bw.write(next.getKey()+":"+next.getValue()+"次");
//刷新缓冲区并换行
bw.newLine();
bw.flush();
}
System.out.println("生成文件成功");
} catch (Exception e) {
// TODO: handle exception
System.out.println("生成文件失败");
e.printStackTrace();
} finally {
//关闭输出流
if(bw!=null){
try {
bw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
}
|
|