黑马程序员技术交流社区
标题:
各位大神,引用数据类型递归怎么相加起来?
[打印本页]
作者:
w1001566
时间:
2016-5-17 21:28
标题:
各位大神,引用数据类型递归怎么相加起来?
public class Test15 {
private static String subFile;
/**
* @param args
* 把一个目录中的所有文本拷贝,存入一个txt文件,统计每个字符出现的次数并输出,例如:a: 21 次 b: 15 次 c:: 15 次 把: 7 次...
*
* 分析:
* 1、创建File对象,关联文件夹路径
* 2、调一个方法,将File路径传入方法,返回值是HashMap
* 3、方法内部创建HashMap集合
* 4、获取File路径下所有文件夹和文件,并遍历
* 5、判断路径如果是文件,后缀并是txt,就创建字符输入流读取该文件
* 6、将读取到的没一行字符串,转换成字符数组,遍历
* 7、将遍历的每个字符存入集合,如果集合中已经包含了这个键,就将键对应的值+1存入
* 8、关流
* 9、判断路径是文件夹路径就递归调用
* @throws Exception
*/
public static void main(String[] args) throws Exception {
File file = new File("E:\\源文件夹\\TXT"); //1、创建File对象,关联文件夹路径
HashMap<Character, Integer> hm = getReader(file); //2、调一个方法,将File路径传入方法,返回值是HashMap
}
private static HashMap<Character, Integer> getReader(File file) throws Exception {
HashMap<Character, Integer> hm = new HashMap<>(); //3、方法内部创建HashMap集合
File[] subFiles = file.listFiles(); //4、获取File路径下所有文件夹和文件,并遍历
for (File subFile : subFiles) {
if(subFile.isFile() && subFile.getName().endsWith(".txt")) { //5、判断路径如果是文件,后缀并是txt,就创建字符输入流读取该文件
BufferedReader br = new BufferedReader(new FileReader(subFile));
String len;
while((len = br.readLine()) != null) {
char[] arr = len.toCharArray(); //6、将读取到的没一行字符串,转换成字符数组,遍历
for (char c : arr) {
hm.put(c, hm.containsKey(c) ? hm.get(c) + 1 : 1); //7、将遍历的每个字符存入集合,如果集合中已经包含了这个键,就将键对应的值+1存入
}
}
br.close(); //关流
}else if(subFile.isDirectory()) { //9、判断路径是文件夹路径就递归调用
hm.putAll(getReader(subFile));
}
}
return hm;
}
}
复制代码
怎么把每次递归返回的集合对象想合并
就像统计一个路径的大小
public static long getFileLength(File dir) { //dir = F:\day06\day07
//1,定义一个求和变量
long len = 0;
//2,获取该文件夹下所有的文件和文件夹listFiles();
File[] subFiles = dir.listFiles(); //day07 Demo1_Student.class Demo1_Student.java
//3,遍历数组
for (File subFile : subFiles) {
//4,判断是文件就计算大小并累加
if(subFile.isFile()) {
len = len + subFile.length();
//5,判断是文件夹,递归调用
}else {
len = len + getFileLength(subFile);
}
}
return len;
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2