首页 > 技术文章 > 使用java读取文件夹中文件的行数

yanghuabin 2016-12-19 20:13 原文

使用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 }

 

 

 

推荐阅读