使用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 Plus(f); 20 } 21 22 /* 23 遍历文件夹 24 */ 25 public static void Plus(File f ){ 26 27 File[] files = f.listFiles();//获取传入路径的所有文件 28 Map map = new HashMap<String,Integer>(); //用来存放统计出来的行数 29 30 //遍历这些文件,需求是CVS中的不统计,所以加判断 31 32 for (File a : files) { 33 //如果文件名是CVS的就跳过 34 if(a.getName().equals("CVS")) { 35 continue; 36 }else { 37 //如果a是文件的话就进入下一级目录,否则就统计行数 38 if (a.isDirectory()) { 39 Plus(a); 40 }else{ 41 map = lineNumber(a.getAbsolutePath(),map); //否者调方法统计行数 42 } 43 } 44 } 45 46 //输出统计的结果 47 getResult(map); 48 49 } 50 51 /* 52 统计相应文件的行数 53 */ 54 public static Map<String,Integer> lineNumber(String f,Map map){ 55 //定义字符流读取文件 56 FileReader fileReader = null; 57 try { 58 fileReader = new FileReader(f); 59 } catch (IOException e){ 60 e.printStackTrace(); 61 System.out.println("输入的路径不正确"); 62 } 63 64 BufferedReader bufferedReader= new BufferedReader(fileReader); //从字节流中升级为字符流,方便按行读取。 65 int index = 0; 66 67 68 try { 69 while (bufferedReader.readLine()!=null){ 70 index++; 71 } 72 map.put(f,index); //将结果放到map中 73 74 75 }catch (IOException e){ 76 e.printStackTrace(); 77 System.out.println("这个文件读不到!"); 78 }finally { 79 if(fileReader != null){ 80 try { 81 fileReader.close(); 82 } catch (IOException e) { 83 e.printStackTrace(); 84 } 85 } 86 return map; 87 } 88 } 89 90 /* 91 将文件的行数存放在一个map中,然后输出行数的和 92 */ 93 public static void getResult(Map map){ 94 int sum = 0; 95 //使用iterator遍历map集合 96 Iterator<Map.Entry<String,Integer>> entries = 97 map.entrySet().iterator(); 98 99 while (entries.hasNext()){ 100 Map.Entry<String,Integer> entry = entries.next(); 101 System.out.println(entry.getKey()+"的行数是:"+entry.getValue()); 102 sum += entry.getValue(); 103 } 104 105 System.out.println("总行数是:"+sum); 106 107 } 108 }
时间: 2024-10-13 10:14:27