黑马程序员技术交流社区

标题: 各位大神,引用数据类型递归怎么相加起来? [打印本页]

作者: w1001566    时间: 2016-5-17 21:28
标题: 各位大神,引用数据类型递归怎么相加起来?
  1. public class Test15 {

  2.         private static String subFile;

  3.         /**
  4.          * @param args
  5.          * 把一个目录中的所有文本拷贝,存入一个txt文件,统计每个字符出现的次数并输出,例如:a:  21 次 b:  15 次 c:: 15 次  把:  7 次...
  6.          *
  7.          * 分析:
  8.          * 1、创建File对象,关联文件夹路径
  9.          * 2、调一个方法,将File路径传入方法,返回值是HashMap
  10.          * 3、方法内部创建HashMap集合
  11.          * 4、获取File路径下所有文件夹和文件,并遍历
  12.          * 5、判断路径如果是文件,后缀并是txt,就创建字符输入流读取该文件
  13.          * 6、将读取到的没一行字符串,转换成字符数组,遍历
  14.          * 7、将遍历的每个字符存入集合,如果集合中已经包含了这个键,就将键对应的值+1存入
  15.          * 8、关流
  16.          * 9、判断路径是文件夹路径就递归调用
  17.          * @throws Exception
  18.          */
  19.         public static void main(String[] args) throws Exception {
  20.                 File file = new File("E:\\源文件夹\\TXT");                                //1、创建File对象,关联文件夹路径
  21.                 HashMap<Character, Integer> hm = getReader(file);                //2、调一个方法,将File路径传入方法,返回值是HashMap
  22.         }

  23.         private static HashMap<Character, Integer> getReader(File file) throws Exception {
  24.                 HashMap<Character, Integer> hm = new HashMap<>();                                        //3、方法内部创建HashMap集合
  25.                 File[] subFiles = file.listFiles();                                                                        //4、获取File路径下所有文件夹和文件,并遍历
  26.                 for (File subFile : subFiles) {
  27.                         if(subFile.isFile() && subFile.getName().endsWith(".txt")) {                //5、判断路径如果是文件,后缀并是txt,就创建字符输入流读取该文件
  28.                                 BufferedReader br = new BufferedReader(new FileReader(subFile));
  29.                                 String len;
  30.                                 while((len = br.readLine()) != null) {
  31.                                         char[] arr = len.toCharArray();                                //6、将读取到的没一行字符串,转换成字符数组,遍历
  32.                                         for (char c : arr) {
  33.                                                 hm.put(c, hm.containsKey(c) ? hm.get(c) + 1 : 1);        //7、将遍历的每个字符存入集合,如果集合中已经包含了这个键,就将键对应的值+1存入
  34.                                         }
  35.                                 }
  36.                                 br.close();                                //关流
  37.                         }else if(subFile.isDirectory()) {                        //9、判断路径是文件夹路径就递归调用
  38.                                 hm.putAll(getReader(subFile));                       
  39.                         }
  40.                 }
  41.                 return hm;
  42.         }

  43. }
复制代码


怎么把每次递归返回的集合对象想合并
就像统计一个路径的大小
  1. public static long getFileLength(File dir) {    //dir = F:\day06\day07
  2.     //1,定义一个求和变量
  3.     long len = 0;
  4.     //2,获取该文件夹下所有的文件和文件夹listFiles();
  5.     File[] subFiles = dir.listFiles();          //day07 Demo1_Student.class Demo1_Student.java
  6.     //3,遍历数组
  7.     for (File subFile : subFiles) {
  8.         //4,判断是文件就计算大小并累加
  9.         if(subFile.isFile()) {
  10.             len = len + subFile.length();
  11.         //5,判断是文件夹,递归调用
  12.         }else {
  13.             len = len + getFileLength(subFile);
  14.         }
  15.     }
  16.     return len;
  17. }
复制代码





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2