博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
统计某个路径下所有的java文件,以及统计代码数量
阅读量:5955 次
发布时间:2019-06-19

本文共 2962 字,大约阅读时间需要 9 分钟。

这个是我哥们遇到的一个面试题。

要求统计某个文件夹下,所有Java文件的数量,并且统计代码数量。

Java文件中,所有的注视都是以//,没有/**/,空行不计入代码数量。

这个面试题,里面有这样几个难点,

1、遍历文件夹,因为文件夹下可能还有文件夹。

2、读取文件,判断代码行,注释行,和空行。

3、写入文件。

其实主要的都是对文件的操作。

代码可以直接复制运行,代码如下:

package com;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.List;import java.util.TreeSet;public class ErgodicFiles {	/*	 *下面说的都是IO	 *这里稍微说一下,字节流字符流,	 *字节有8个二进制位组成,计算机里面储存的任何东西,都是以二进制位保存的,所以,任何文件,都可以用字节流来保存操作。	 *字节流,InputStream ,OutputStream	 *但是,如果明确知道这个文件,属于文本文件,并且对这个文本可能进行操作,读取行,写入行等,进行行级操作的时候,用字符流。	 *字符流Reader ,Writer	 *	 *关于NIO的正在研究,	 *IO:流	 *NIO:缓冲区	 */	static List
javalsf = new ArrayList
(); static List
lsf = new ArrayList
(); static int javaFileLinenum = 0; TreeSet
nums = new TreeSet
(); public static void main(String[] args) throws Exception { File fir = new File("W:/test"); FileOutputStream fio = null; try { //1、 //字节流输入文件 getJavaFiles(fir,lsf); fio = new FileOutputStream(new File("W:/ALLFILE.txt")); String javastr = "java文件个数是:"+javalsf.size()+"个"; String str = "其他文件个数是:"+lsf.size()+"个"; //输入到文件中。 fio.write(javastr.getBytes()); //FileOutputStream 换行 fio.write("\r\n".getBytes()); //继续输出文件 fio.write(str.getBytes()); fio.write("\r\n".getBytes()); fio.write("\r\n".getBytes()); if(javalsf.size()>0){ for(File javafir : javalsf){ getJavaFileNum(javafir); } } String numstr = "java代码的行数是:"+javaFileLinenum; fio.write(numstr.getBytes()); //2、 //字符流输入文件 //FileWriter fw = new FileWriter("w:/zfAllFile.txt"); } catch (Exception e) { e.printStackTrace(); }finally{ if(fio!=null){ fio.close(); } } } //循环路径下所有的文件。 public static List
getJavaFiles (File fir, List
listfile){ //判断文件是否存在 if (!fir.exists()){ System.out.println("文件名称不存在!"); }else{ //判断是否是文件 if (fir.isFile()){ //如果当前fir是文件,则判断是什么文件 String firName = fir.getName();//获取文件名 //System.err.println(firName.hashCode()); 获取文件后缀名 if(firName.substring(firName.lastIndexOf(".")+1) .equals("java")){ javalsf.add(fir); }else{ lsf.add(fir); } } else{ //如果当前fir是文件夹,则遍历整个文件夹为File数组,继续循环遍历 File[] files = fir.listFiles(); for (int i = 0; i < files.length; i++ ){ getJavaFiles(files[i], listfile); } } } return lsf; } //查看java文件中的代码数量 public static void getJavaFileNum(File fir){ int num = 0 ; try { //不能指定编码格式,会出现乱码问题 //FileReader reader = new FileReader(new File("w:/test.java")); System.out.println("查看的文件是:"+fir.getName()); System.out.println("当前文件的路径是"+fir.getPath()); //可以指定编码格式。 InputStreamReader isr=new InputStreamReader(new FileInputStream(fir),"GBK"); BufferedReader br = new BufferedReader(isr); String str = null; while ((str = br.readLine()) != null) { if(!str.startsWith("//")&&!str.equals("")){ num ++; } } System.out.println("num的数量是:"+num); br.close(); } catch (Exception e) { e.printStackTrace(); } javaFileLinenum += num; System.out.println("Java代码的总量是:"+javaFileLinenum); }}

转载地址:http://ajlxx.baihongyu.com/

你可能感兴趣的文章
Oracle闪回技术
查看>>
利用单壁路由实现vlan间路由
查看>>
hello world
查看>>
CentOS 7 配置yum本地base源和阿里云epel源
查看>>
python 学习导图
查看>>
生成树
查看>>
(MYSQL) Unknown table 'a' in MULTI DELETE的解决办法
查看>>
作为一个程序员必备的素质
查看>>
Webpack入门教程十四
查看>>
104种***清除方法
查看>>
Exchange 2016 之移动设备邮箱策略
查看>>
zookeeper使用简介及注意事项
查看>>
python练习题1
查看>>
mha-环境搭建
查看>>
rabbitMq
查看>>
ubuntu mysql lessons
查看>>
Linux命令基础
查看>>
Hibernate查询技术(2)
查看>>
https被修改成http排查过程
查看>>
常用端口号
查看>>