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