思路:
①创建文件及相应的流。
②处理数据:读入和写出。补充:处理文本中字符出现的次数(方式一:将文本文件的字符添加到list,再将字符作为key存入map中,value为字符出现次数;方式二:也可以直接将读入字符存入map中)
③关闭资源。
/**
* 记录文本文件内所有字符出现的次数
* @param srcPath 待记录的文本文件(绝对路径,文件后缀名为txt)
* @param destPath 将记录的数据写入到该文本文件下(绝对路径,文件后缀名为txt)
*/
public void countForFileWords(String srcPath, String destPath) {
List<Character> list = new ArrayList<>();//将文件字符存储到list中
Map<Character, Integer> map = new HashMap<>();//将list中数据存入map中,value记录字符出现的次数
BufferedReader br = null;
BufferedWriter bw = null;
try {
//1.创建文件及相应的流
br = new BufferedReader(new FileReader(srcPath));
bw = new BufferedWriter(new FileWriter(destPath));
//2.处理数据:读入和写出
int data;
//2.1读入文本文件,并将出现的字符添加到list中
while ((data = br.read()) != -1) {
char ch;
ch = (char) data;
list.add(ch);
}
//key为文本中出现的字符,value为该字符出现的次数
for (Character c : list) {
Integer count = map.get(c);//通过key返回当前字符出现次数,如没有当前字符返回null
map.put(c, (count == null) ? 1 : count + 1);
}
//遍历map,getValue()返回值即为字符出现次数
Set<Map.Entry<Character, Integer>> entrySet = map.entrySet();
for (Map.Entry<Character, Integer> entry : entrySet) {
//2.2写入相应字符出现的次数
switch (entry.getKey()) {
case ' ':
bw.write("空格 = " + entry.getValue());
break;
case '\t':
bw.write("制表符 = " + entry.getValue());
break;
case '\n':
bw.write("换行 = " + entry.getValue());
break;
case '\r':
bw.write("回车 = " + entry.getValue());
break;
default:
bw.write(entry.getKey() + " = " + entry.getValue());
break;
}
bw.newLine();//换行
}
} catch (IOException e) {
e.printStackTrace();
} finally {
//3.关闭资源
if (bw != null) {
try {
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
方式二:直接将读入字符存入map中
//2.处理数据:读入和写出
int data;
//2.1读入文本文件,并将出现的字符添加到map中
while ((data = br.read()) != -1) {
char ch;
ch = (char) data;
if (!map.containsKey(ch)) {
map.put(ch, 1);//map中没有该字符时出现次数即为1
} else {
map.put(ch, map.get(ch) + 1);//此时map中有该字符,将value在原有的基础上+1
}
}
//遍历map,getValue()返回值即为字符出现次数
Set<Map.Entry<Character, Integer>> entrySet = map.entrySet();
//2.2写入相应字符出现的次数
for (Map.Entry<Character, Integer> entry : entrySet) {
switch (entry.getKey()) {
case ' ':
bw.write("空格 = " + entry.getValue());
break;
case '\t':
bw.write("制表符 = " + entry.getValue());
break;
case '\n':
bw.write("换行 = " + entry.getValue());
break;
case '\r':
bw.write("回车 = " + entry.getValue());
break;
default:
bw.write(entry.getKey() + " = " + entry.getValue());
break;
}
bw.newLine();
}