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