用Java实现文件的读写

一 项目说明

实训目的:字符串处理、文件读写、集合的应用

实训要求:自己先准备一个 txt 文件,文档里存有一篇英文短文。先一行行读取文件中的内容,并将一行行短文中的标点符号替换成空格,然后以空格作为划分标准,统计整个 txt 文档中每个单词出现的次数。

项目实现设计 

在该类的主方法中定义一个双列集合,键用来存储单词,值用来存储单词的个数,定义一个字符缓冲流,用来对字符输入流进行操作,reader.readLine()用来一次读取一行文本,在定义一个字节流,用来存储把文件中的标点符号替换掉的文本,定义一个字符串,初始化null,用来临时存储一行行文本,while((ss=reader.readLine())!=null)文件一行一行的读,直到读到文件尾,用trim()和split("\\s+")方法将每一行的首尾空格去掉并以空格为分隔规则,将字符串分割成若干个子字符串存入字符串数组中,在for循环中用m.containsKey(word)方法判断集合中是否含有该单词这个键,如果不含有,就将该单词存如集合的键中,并把该键对应的值设为1,如果含有,就在该值的基础上加1。在用一个for循环,判断条件为该字符是否为标点符号,如果是,就把该标点符号替换成空格,如果不是就把原字符存如字符数组中,然后转化为字符串,写入到writer文本中,在外层循环外写入一个换行语句out.write(wordOne.getBytes());使每读完一行就换行,和原文本article保持一致,并关闭流。在while循环结束后,用一个foreash循环遍历输出每个单词出现的次数。

package experiment.six;
import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.util.Set;
import java.util.TreeMap;
public class FileReadWrite {
  public static void main(String[] args) throws IOException {
    TreeMap<String,Integer> m=new TreeMap<>();//定义一个双列集合,键用来存单词,值用来存单词个数
      BufferedReader reader=new BufferedReader(
          new FileReader("E:\\eclipse-workspace\\chapter03\\src\\article"));
      //创建一个文件字节输出流来输出文件
      FileOutputStream out=new FileOutputStream("E:\\eclipse-workspace\\chapter03\\src\\writer",true);
      String ss=null;        //定义一个字符串,初始化null    
      while((ss=reader.readLine())!=null) {//文件一行一行的读,直到读到文件尾
        String[] str=ss.trim().split("\\s+");//
        for(int i=0;i<str.length;i++) {
          //
          String word=str[i].trim();
          /*判断Map集合中是否存在指定的键对象key
           * 如果存在,就把个数的个数加1,如果不存在,就把该值加入进去
          */
          if(m.containsKey(word)) {
            m.put(word, m.get(word)+1);
          }else {
            m.put(word,1);
          }
          //将文档中的标点符号替换成空格start
          char[] ch =new char[word.length()];
             for(int j=0;j<word.length();j++) {//将文档中的标点符号替换成空格
              if(((word.charAt(j)+"").equals(","))||((word.charAt(j)+"").equals("."))||((word.charAt(j)+"").equals("?"))||((word.charAt(j)+"").equals("!")||((word.charAt(j)+"").equals("\"")))) {
                ch[j]=' ';
            }else {
                ch[j]=word.charAt(j);
              }
            }
             word=word.trim();
             word=new String(ch);
             //将字符串转化为字节数组进行写入操作
             out.write(word.getBytes());  
             //在每个单词后面加个空格
             String wordOne=" ";
             out.write(wordOne.getBytes());
             //将文档中的标点符号替换成空格end
        }
           out.write("\n".getBytes());//读完一行后自动换行      
      }  
      out.close();//关闭流
      reader.close();
      System.out.println("统计各单词个数为:");
      Set<String> st=m.keySet();//以Set集合的形式返回Map集合中所以的键对象
      for(String k:st) {        //foreash循环遍历
        if(!k.equals(" ")){    //判断是否读到文件尾
          char[] str=k.toCharArray();
          for(int i=0;i<str.length;i++) {
            if((str[i]>='a'&&str[i]<='z')||(str[i]>='A'&&str[i]<='Z')) {
              System.out.print(str[i]);
            }
          }
          System.out.println("出现了"+m.get(k.trim())+"次");
        }
      }
  }
}

                                                                                  原文件的部分截图 

                                                               将行短文中的标点符号替换成空格后的文本的部分截图

                                                                                统计每个单词出现的次数的截图

发布了29 篇原创文章 · 获赞 3 · 访问量 411

猜你喜欢

转载自blog.csdn.net/dwjdj/article/details/103564338