统计某个路径下所有的java文件,以及统计代码数量

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

要求统计某个文件夹下,所有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<File> javalsf = new ArrayList<File>();
	static List<File> lsf = new ArrayList<File>();
	static int javaFileLinenum = 0;

	TreeSet<String> nums = new TreeSet<String>();

	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<File> getJavaFiles (File fir, List<File> 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);
	}
}
时间: 2024-09-08 12:36:10

统计某个路径下所有的java文件,以及统计代码数量的相关文章

python获取指定路径下所有指定后缀文件的方法

  本文实例讲述了python获取指定路径下所有指定后缀文件的方法.分享给大家供大家参考.具体实现方法如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 # 获取指定路径下所有指定后缀的文件 # dir 指定路径 # ext 指定后缀,链表&不需要带点 或者不指定.例子:['xml', 'java'] def GetFileFromThisRootDir(dir,ext = None): allfiles = [] needExtFilter = (ext !=

DOS下编译一个.java文件后再用java不能编译文件名.class文件?

问题描述 比如hello.java文件编译后生成hello.class文件后,用java命令只能输入javahello,为什么不能输入javahello.class(会出现couldnotfindorloadmainclasshello.class)? 解决方案 解决方案二:javacxxx.java是编译,javaxxx是执行,不是编译.JAVA跨平台的特性,一次编译,多次执行.解决方案三:还有,这是一个标准,在操作系统上就只认识这个东西,如果你写一个操作系统,要加上.class才能执行,那就

浏览器运行java文件竟然显示代码???

问题描述 我刚开始学习JAVA,按照网上的教程安装了Apache.J2EE SDK.JDK.JRE.MySQL.Tomcat等,进行了Apache与Tomcat的整合,测试了一下JDBC的JSP文件可以正常,但是另外写了一个打印Hello world的java程序,在命令行下编译运行都正常,但是用页面浏览就直接显示该java程序的源代码???搞不懂怎么回事,望大家帮一下忙,谢谢!!! 解决方案 对于在Tomcat下部署的J2EE程序,Tomcat服务器可以识别的文件主要是Jsp文件以及class

VB.NET拷贝整个目录下所有子目录及文件的实例代码

这篇文章介绍了拷贝整个目录下所有子目录及文件的代码,有需要的朋友可以参考一下   复制代码 代码如下:  Public Sub CopyDerictory(ByVal DirectorySrc As DirectoryInfo, ByVal DirectoryDes As DirectoryInfo)         Dim strDirectoryDesPath As String = DirectoryDes.FullName & "" & DirectorySrc

asp伪静态情况下实现的utf-8文件缓存实现代码_应用技巧

复制代码 代码如下: <%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%> <% Response.CodePage=65001%> <% Response.Charset="UTF-8" %> <% '该程序通过使用ASP的FSO功能,减少数据库的读取.经测试,可以减少90%的服务器负荷.页面访问速度基本与静态页面相当. '使用方法:将该文件放在网站里,然后在需要引用的文件

asp伪静态情况下实现的utf-8文件缓存实现代码

复制代码 代码如下: <%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%> <% Response.CodePage=65001%> <% Response.Charset="UTF-8" %> <% '该程序通过使用ASP的FSO功能,减少数据库的读取.经测试,可以减少90%的服务器负荷.页面访问速度基本与静态页面相当. '使用方法:将该文件放在网站里,然后在需要引用的文件

Java 文件解压缩实现代码_java

Java实现压缩文件的解压缩操作,缺点是压缩文件内不能含有文件名为中文的的文件,否则会出现如下错误: 复制代码 代码如下: Exception in thread "main" java.lang.IllegalArgumentException: MALFORMED at java.util.zip.ZipCoder.toString(Unknown Source) at java.util.zip.ZipInputStream.readLOC(Unknown Source) at

VB.NET拷贝整个目录下所有子目录及文件的实例代码_实用技巧

复制代码 代码如下:  Public Sub CopyDerictory(ByVal DirectorySrc As DirectoryInfo, ByVal DirectoryDes As DirectoryInfo)        Dim strDirectoryDesPath As String = DirectoryDes.FullName & "" & DirectorySrc.Name         If Not Directory.Exists(strD

vbs下通过日期查找文件夹的代码_vbs

On Error Resume Next dtmTargetDate = "20020301000000.000000-420" strComputer = "." Set objWMIService = GetObject _     ("winmgmts:" & "!\\" & strComputer & "\root\cimv2") Set colFolders = objWM