使用java讀取文件夾中文件的行數

使用java統計某文件夾下全部文件的行數  java

  經理忽然交代一個任務:要求統計某個文件夾下全部文件的行數。在網上查了一個多小時沒有解決。後來內心不爽就決定本身寫一個java類用來統計文件的行數,因而花了兩個小時將代碼寫出(可見個人java功底仍是挺爛的)。雖然有不少有待改進的地方,依然有記念意義。oop

  本java類的核心是經過BufferedReader類的readLine()方法,間接的統計行數;經過遞歸遍歷文件。spa

  這個類只是寫來完成任務的。結果不是很嚴謹,許多狀況並沒考慮到:好比判斷想讀取某一類文件怎麼辦?這個須要同窗們努力了。code

  想複用的同窗只需將main方法中的路徑改掉便可。blog

  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 }
相關文章
相關標籤/搜索