本文用递归,高效计算目录下文件后缀名和对应的个数。
public class Test {
public static void main(String args[]) {
File tFile = new File("D:/Program Files (x86)");//指定文件路径
Map<String, Integer> tMap = new HashMap<String, Integer>();
new Test().getFileTypeAndSize(tMap, tFile);//调用计算个数方法
for (Iterator<String> key = tMap.keySet().iterator(); key.hasNext(); ){//便利输出
String name = key.next();
Integer size = tMap.get(name);
System.out.println("后缀名为【"+name+"】的文件有"+size+"个");
}
}
public void getFileTypeAndSize(Map<String, Integer> cMap, File cFile) {
if (cFile.isDirectory()){//核心方法,(是否为目录)
File[] tFiles = cFile.listFiles();
for (File tFileIndex : tFiles)
getFileTypeAndSize(cMap, tFileIndex);//递归
} else {
String [] tFileName = cFile.getName().split("\\.");//分割成后缀和文件名
String tFileType = "";
if (tFileName.length == 2) {//是否有后缀名
tFileType = tFileName[1];
}
if (cMap.containsKey(tFileType)) {//已经存过了这个后缀名
int tSize = (Integer)cMap.get(tFileType);
cMap.put(tFileType, new Integer(tSize + 1));
} else {//第一次存
cMap.put(tFileType, new Integer(1));
}
}
}
}
public class Test {
public static void main(String args[]) {
File tFile = new File("D:/Program Files (x86)");//指定文件路径
Map<String, Integer> tMap = new HashMap<String, Integer>();
new Test().getFileTypeAndSize(tMap, tFile);//调用计算个数方法
for (Iterator<String> key = tMap.keySet().iterator(); key.hasNext(); ){//便利输出
String name = key.next();
Integer size = tMap.get(name);
System.out.println("后缀名为【"+name+"】的文件有"+size+"个");
}
}
public void getFileTypeAndSize(Map<String, Integer> cMap, File cFile) {
if (cFile.isDirectory()){//核心方法,(是否为目录)
File[] tFiles = cFile.listFiles();
for (File tFileIndex : tFiles)
getFileTypeAndSize(cMap, tFileIndex);//递归
} else {
String [] tFileName = cFile.getName().split("\\.");//分割成后缀和文件名
String tFileType = "";
if (tFileName.length == 2) {//是否有后缀名
tFileType = tFileName[1];
}
if (cMap.containsKey(tFileType)) {//已经存过了这个后缀名
int tSize = (Integer)cMap.get(tFileType);
cMap.put(tFileType, new Integer(tSize + 1));
} else {//第一次存
cMap.put(tFileType, new Integer(1));
}
}
}
}