/**
* 获取文本上每个字符出现的个数,并将结果写入文本文件
*/
@Test
public void test3() {
//创建字符输入流对象
FileReader fileReader = null;
//创建字符输出缓冲流
BufferedWriter bufferedWriter = null;
try {
//创建一个需要统计文件
File file = new File("hello.txt");
//创建一个Map集合,用来保存字符出现的次数
Map<Character, Integer> map = new HashMap<>();
//读入文本文件,计算字符出现的次数
fileReader = new FileReader(file);
int c = 0;
while ((c = fileReader.read()) != -1) {
//将int型转换为char型
char ch = (char) c;
//方式一
//判断map集合中是否有该字符,不存在,则表示是第一次出现
// if(map.get(ch) == null) {
// map.put(ch, 1);
// } else {
// //不是第一次出现,则次数加1
// map.put(ch, map.get(ch) + 1);
// }
//方式二
//key如果是第一次出现,则次数添加1,不是第一次出现,则次数加1
map.merge(ch, 1, Integer::sum);
}
//创建一个结果文件,记录统计结果
File resultFile = new File("result.txt");
//创建字符缓冲输出流对象
bufferedWriter = new BufferedWriter(new FileWriter(resultFile));
//循环map集合,将结果写入文本文件
Set<Map.Entry<Character, Integer>> entrySet = map.entrySet();
for (Map.Entry<Character, Integer> entry : entrySet) {
switch (entry.getKey()) {
case '\n':
bufferedWriter.write("换行符 出现个数:" + entry.getValue());
break;
case '\t': //就是tab键
bufferedWriter.write("制表符 出现个数:" + entry.getValue());
break;
case '\r':
bufferedWriter.write("回车符 出现个数:" + entry.getValue());
break;
case ' ':
bufferedWriter.write("空格 出现个数:" + entry.getValue());
break;
default:
bufferedWriter.write(entry.getKey() + " 出现个数:" + entry.getValue());
break;
}
bufferedWriter.newLine(); //添加换行
}
} catch (Exception e) {
e.printStackTrace();
} finally {
//关闭缓冲字符输出流
if(bufferedWriter != null) {
try {
bufferedWriter.close();
} catch (IOException e) {
e.printStackTrace();
}
}
//关闭字符输入流
if(fileReader != null) {
try {
fileReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
结果展示