使用java统计某文件夹中所有文件的行数。
使用java统计某文件夹下所有文件的行数
经理突然交代一个任务:要求统计某个文件夹下所有文件的行数。在网上查了一个多小时没有解决。后来心里不爽就决定自己写一个java类用来统计文件的行数,于是花了两个小时将代码写出(可见我的java功底还是挺烂的)。虽然有很多有待改进的地方,依然有纪念意义。
本java类的核心是通过BufferedReader类的readLine()方法,间接的统计行数;通过递归遍历文件。
这个类只是写来完成任务的。结果不是很严谨,许多情况并没考虑到:比如判断想读取某一类文件怎么办?这个需要同学们努力了。
想复用的同学只需将main方法中的路径改掉即可。
1 package Test;
2
3
4 import java.io.*;
5 import java.util.HashMap;
6 import java.util.Iterator;
7 import java.util.Map;
8
9 /**
10 * Created by 杨华彬 on 2016/12/19.
11 */
12 public class Stastiscs {
13 /*
14 main方法
15 */
16 public static void main(String[] args){
17 //输入路径,请在括号内输入路径。
18 File f = new File("D:/LanguagePractise/java/Hadoop/src/main/java");
19 Map map = new HashMap<String,Integer>(); //用来存放统计出来的行数
20 Plus(f,map);
21 //输出统计的结果
22 getResult(map);
23 }
24
25 /*
26 遍历文件夹
27 */
28 public static void Plus(File f ,Map map){
29
30 File[] files = f.listFiles();//获取传入路径的所有文件
31
32
33 //遍历这些文件,需求是CVS中的不统计,所以加判断
34
35 for (File a : files) {
36 //如果文件名是CVS的就跳过
37 if(a.getName().equals("CVS")) {
38 continue;
39 }else {
40 //如果a是文件的话就进入下一级目录,否则就统计行数
41 if (a.isDirectory()) {
42 Plus(a,map);
43 }else{
44 map = lineNumber(a.getAbsolutePath(),map); //否者调方法统计行数
45 }
46 }
47 }
48
49
50 }
51
52 /*
53 统计相应文件的行数
54 */
55 public static Map<String,Integer> lineNumber(String f,Map map){
56 //定义字符流读取文件
57 FileReader fileReader = null;
58 try {
59 fileReader = new FileReader(f);
60 } catch (IOException e){
61 e.printStackTrace();
62 System.out.println("输入的路径不正确");
63 }
64
65 BufferedReader bufferedReader= new BufferedReader(fileReader); //从字节流中升级为字符流,方便按行读取。
66 int index = 0;
67
68
69 try {
70 while (bufferedReader.readLine()!=null){
71 index++;
72 }
73 map.put(f,index); //将结果放到map中
74
75
76 }catch (IOException e){
77 e.printStackTrace();
78 System.out.println("这个文件读不到!");
79 }finally {
80 if(fileReader != null){
81 try {
82 fileReader.close();
83 } catch (IOException e) {
84 e.printStackTrace();
85 }
86 }
87 return map;
88 }
89 }
90
91 /*
92 将文件的行数存放在一个map中,然后输出行数的和
93 */
94 public static void getResult(Map map){
95 int sum = 0;
96 //使用iterator遍历map集合
97 Iterator<Map.Entry<String,Integer>> entries =
98 map.entrySet().iterator();
99
100 while (entries.hasNext()){
101 Map.Entry<String,Integer> entry = entries.next();
102 System.out.println(entry.getKey()+"的行数是:"+entry.getValue());
103 sum += entry.getValue();
104 }
105
106 System.out.println("总行数是:"+sum);
107
108 }
109 }