• Java文件操作递归遍历文件目录


      在读取文件降序输出单词及其个数的基础上,将txt文件存入文件夹中,开始递归遍历文件目录,之后输出txt文件中的单词及其个数,仍然是降序排列。

      代码如下

     1 import java.io.BufferedReader;
     2 import java.io.File;
     3 import java.io.FileReader;
     4 import java.util.Map;
     5 import java.util.Map.Entry;
     6 import java.util.ArrayList;
     7 import java.util.Collections;
     8 import java.util.Comparator;
     9 import java.util.HashMap;
    10 import java.util.List;
    11 
    12 public class Traverse4 {
    13     public static void main(String[] args) {
    14         Traverse4 K = new Traverse4();
    15         //调用遍历方法
    16         K.Run("E:\\article");
    17     }
    18     //递归遍历文件
    19     public void Run(String AllFile) {
    20         File tfile = new File(AllFile);
    21         //构建文件数组
    22         File[] files = tfile.listFiles();
    23         for(int i = 0; i < files.length; i++) {
    24             //判定该文件是否为目录
    25             if(files[i].isDirectory()) {
    26                 //是,递归调用函数
    27                 Run(files[i].getAbsolutePath());
    28             }else {
    29                 //不是,读取文件输出单词个数
    30                 System.out.println("**********"+files[i].getAbsolutePath()+"**********");
    31                 ReadFile(files[i].getAbsolutePath());
    32             }
    33         }
    34     }
    35     //统计单词个数,排序,输出
    36     public void ReadFile(String fname) {
    37         File file=new File(fname);
    38         try {
    39             FileReader fr = new FileReader(file);
    40             BufferedReader bufr = new BufferedReader(fr);
    41             String s = null;
    42             //创建哈希表
    43             Map<String,Integer> hm = new HashMap<>();
    44             while((s=bufr.readLine())!=null){
    45                 //利用正则表达式分割出单词
    46                 String[]strs = s.split("[^a-zA-Z0-9]");
    47                 //向哈希表存入单词,统计个数
    48                 for(int i = 0; i < strs.length; i++){
    49                     strs[i].toLowerCase();
    50                     if(!hm.containsKey(strs[i])){
    51                         hm.put(strs[i], 1);
    52                     }else{
    53                         Integer counts = hm.get(strs[i]);
    54                         hm.put(strs[i], counts+1);
    55                     }
    56                 }
    57             }
    58             //调用排序方法
    59             sort(hm);
    60             bufr.close();
    61             fr.close();
    62         }catch(Exception e){
    63             e.printStackTrace();
    64         }
    65     }
    66     
    67     public void sort(Map<String,Integer>map) {
    68         //重写List降序排序
    69         List<Map.Entry<String, Integer>> infoIds = new ArrayList<Map.Entry<String, Integer>>(map.entrySet());
    70         Collections.sort(infoIds, new Comparator<Map.Entry<String, Integer>>() {
    71             public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
    72                 return (o2.getValue() - o1.getValue());
    73             }
    74         });
    75         //输出
    76         for (int i = 0; i < infoIds.size(); i++) {
    77             Entry<String, Integer> id = infoIds.get(i);
    78         System.out.println(id.getKey()+":"+id.getValue());
    79         }
    80     }
    81 }

    此次任务只需要编写一个能够实现递归遍历文件目录的方法即可,重点还是统计单词个数和排序输出,这次统计与排序全部都由HashMap完成,统计方法是在编入单词之前先使用containsKey()抓取已存在的键信息,若单词存在其值+1,否则新构建键,以值为1的形式存入该单词。排序则是重写List方法实现,输出时要注意遍历重写后的List对象,如果遍历的是之前创建的HashMap对象,得到的结果是没有排序之前的数据。

  • 相关阅读:
    Surface Mount Package Details
    Boost Converter
    IPC low/medium/high density 什么意思?
    SMT Surface Mount Technology footprint references
    Time Step Too Small in Multisim
    mOByDiC E90C2600 EOBD/OBDII to RS232 gateway
    STN1110 Multiprotocol OBD to UART Interpreter
    STN1170 Multiprotocol OBD to UART Interpreter
    BR16F84 OBD II Interface Chip For PWM, VPW, and ISO 9141-2 Vehicles
    ELM327 OBD to RS232 Interpreters
  • 原文地址:https://www.cnblogs.com/20183711PYD/p/11809030.html
Copyright © 2020-2023  润新知