//javaSE的复习中偶然遇到这个IO流问题,做一次发现还有许多的不足
//总结如下:①递归调用问题
第一次把Set集合放在调用函数中,每次递归调就会创建一个新的Set对象,导致无法存储文件后缀对象
②集合问题
在迭代器中两个集合比较,会出现异常
package ceShi;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import java.util.Set;
public class file {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入你要查询的文件夹:");
String url = sc.next();
String Url = url.replace("\\","\\\\");
File file = new File(Url);
Set<String> set = new HashSet<String>();
List<String> list = new ArrayList<String>();
List<String> list1 = new ArrayList<String>();
Map<String,Integer> map =new HashMap<String,Integer>();
function(file,set,list);
System.out.println(set.toString());
System.out.println(list.toString());
list1.addAll(set);
System.out.println(list1);
//Iterator it = list1.iterator();
for(int j = 0;j<list1.size();j++){
int value =0;
System.out.println(list1.get(j));
for(int i = 0; i<list.size();i++){
if(list.get(i).equals(list1.get(j))){
value++;
}
}
map.put((String) list1.get(j), value);
}
Iterator it = list1.iterator();
while(it.hasNext()){
String key = (String) it.next();
Integer value = map.get(key);
System.out.println("在文件"+url+"中"+key+"类型文件有"+value+"个");
}
}
private static void function(File file,Set set,List list) {
// TODO Auto-generated method stub
File[] fileArr =file.listFiles();
for(File f:fileArr){
if(f.isDirectory()){
function(f,set,list);
}else{
typeOf(f.toString());
set.add(leiXing(f.toString()));
list.add(leiXing(f.toString()));
}
}
}
//文件类型函数,获取文件后缀
private static String typeOf(String str){
return str.substring(str.lastIndexOf(".")+1,str.length());
}
}