package it.heima.test;
import java.io.FileReader;
import java.io.IOException;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeMap;
/**
*
* @author Administrator
*
* 需求:
* 在d盘下有一个加密文件a.txt(文件里只有英文和数字),密码是"nihao",当密
* 码输入正确时才能读取文件里的数据。现要求用代码来模拟读取文件的过程,并统计文件
* 里各个字母出现的次数,并将统计结果按照“a:2个;b:3个;.....”类似的格式输
* 出打印在控制台上。
*/
public class Test2 {
public static void main(String[] args) throws IOException {
// 定义String类型的变量存储密码
String s = "nihao";
// 定义键盘输入密码
String sum = "";
@SuppressWarnings("resource")
Scanner sc = new Scanner(System.in);
System.out.println("请输入密码:");
String s2 = sc.nextLine();
if (s.equals(s2)) {
// 创建输出流对象
FileReader fr = new FileReader("d:\\a.txt");
//创建map集合对象
TreeMap<Character, Integer> hs = new TreeMap<Character, Integer>();
StringBuffer sb = new StringBuffer();
//读取数据并添加到集合中
int len = 0;
while ((len = fr.read()) != -1) {
//每读取一个字符就添加到集合中
sb.append((char) len);
}
//将集合中的字符转换为字符串
String s3 = new String(sb);
//再将字符串转换为字符数组
char[] chs = s3.toCharArray();
//遍历字符数组,将遍历到的字符作为键存储到集合中
for (char c : chs) {
//判断集合中是否有键值
if (!hs.containsKey(c)) {
//如果没有键值就向集合中添加相应的键和值
hs.put(c, 1);
} else {
//如果有,将键值对应的值加1
hs.put(c, hs.get(c) + 1);
}
}
//获取TreeMap集合中的键,保存到Set集合中
Set<Character> w = hs.keySet();
//遍历集合获取键对应的值
for (char key : w) {
//按指定的格式输出统计的字符个数
String s4 = key + ":" + hs.get(key) + "个" + ";";
sum = sum + s4;
}
System.out.println(sum);
fr.close();
}
}
}
|
|