代码:
package com.hello.wc;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;
public class WordCouut {
//定义文件所在的路径
public static String read_path ="D:\\words.txt";
//定义读取文件IO的缓冲流对象
public static BufferedReader br = null;
//定义读取一行的数据文件对象
public static String line_current = null;
//定义split切分后饭后的对象
public static String[] words=null;
//定义写入文件缓冲流的对象
public static BufferedWriter bw = null;
//主方法
public static void main(String[] args) throws Exception {
/**
* 定义文件的对象
* 判断文件石头存在
* 不存在则输出该文件不存在
*/
File file = new File(read_path);
if(!file.exists()){
System.out.println("输入文件未找到");
}
//给读取缓冲流赋值,编码格式为UTF-8
br = new BufferedReader(new InputStreamReader(new FileInputStream(file.getPath()), "utf-8"));
//生命LIst集合并复制
List<String> li = new ArrayList<String>();
/**
* 循环读取文件的每一行,并将没一行读取来的字符创进行按空格切分
* 并将结果写到集合当中
*/
while((line_current=br.readLine()) != null){
//返回的字符串类型
words = line_current.split(" ");
//增强for循环遍历字符创数组,如过字符串数组不等空就将字符创写入到LIst集合当中
for (String s : words) {
if(!s.equals("")){
li.add(s);
}
}
}
//生命MAp集合,实现接口
Map<String, Integer> hashMap = new HashMap<String,Integer>();
/**
* 鲟鳇遍历list集合将集合中的元素遍历出来,
* 根据HashMap的get()方法 将list中的集合元素一次当get()的参数,从而Key获取Value的值,
* 需要判断根据Key所获取的value是否为空,如果为空复制为0,不为空则是value+1
* 并将结果写入到HashMap集合当中
*/
for (String temp : li) {
Integer count = hashMap.get(temp);
if(count==null){
count = Integer.valueOf(0);
}
if(count!=null)
{
count =count+1;
}
hashMap.put(temp,count);
}
for (Map.Entry<String, Integer> map: hashMap.entrySet()) {
System.out.println(map.getKey()+"\t"+map.getValue());
}
TreeMap<String, Integer> treeMap = new TreeMap<String,Integer>(hashMap);
printMap(treeMap);
colseInput(br);
colseOutput(bw);
}
/**
* 输入缓冲流的关闭
* @param reader
*/
public static void colseInput(BufferedReader reader){
try {
if(reader!=null){
reader.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 输出缓冲流的关闭
* @param writer
*/
public static void colseOutput(BufferedWriter writer){
try {
if(writer!=null){
writer.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 写入文件和控制台打印输出的方法
* @param map
* @throws IOException
*/
public static void printMap(Map<String, Integer> map) throws IOException{
//实例化写入文件的对象
bw = new BufferedWriter(new FileWriter("D:\\count.txt"));
for (Map.Entry<String, Integer> entry: map.entrySet()) {
//打印输出到控制台
System.out.println("words: "+entry.getKey()+"\tnumbes: "+entry.getValue());
//定义写入文件的格式
writerCount("words: "+entry.getKey()+"\tnumbes: "+entry.getValue());
}
}
/**
* 一次传入字符串类型,将该字符串写入到文件中
* @param line
* @throws IOException
*/
public static void writerCount(String line) throws IOException{
/**
* 判断输出留对象是否为空不为空则将字符串写到文件中
*/
if(bw!=null){
//写入
bw.write(line);
//新开一行
bw.newLine();
bw.flush();
}
}
}
注释写的不怎么好,凑合的看吧!!