转自:https://blog.csdn.net/u012246342/article/details/51734358
这个是我哥们遇到的一个面试题。
要求统计某个文件夹下,所有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); } }
相关推荐
在描述中,“用java写的一个可以统计某个目录下各种文件类型的信息的源码”进一步揭示了该工具的核心功能,即它能够遍历一个目录及其子目录,识别出如.java、.txt、.html等各种文件,并对这些文件进行计数或者其他...
例如,如果你有一个名为"my_project"的目录,你可以运行"linecount my_project"来获取该目录下所有代码的统计信息。工具通常会返回总代码行、空行、注释行等关键数据。 值得注意的是,虽然代码行数是一个直观的度量...
在Java编程中,有时我们需要统计一个特定目录下包含的文件和子目录的数量。这个任务可以通过使用`java.io.File`类来实现。以下是一个简单的Java程序,它演示了如何完成这个功能: ```java package my; import java...
5. **统计信息**:在代码中看到的`num01`和`num02`变量用于统计目录中的文件夹和文件数量,而`size`变量用于统计目录的总大小。这些统计信息可以在程序执行过程中动态更新,以便用户了解复制进度。 6. **日期格式化...
在日常的计算机操作中,有时我们需要统计某个文件夹下包含的文件数量,这对于管理大量数据、备份文件或者优化存储空间非常有用。标题“查询文件夹文件数量”和描述中的重复内容都指向了这一核心需求。在这个场景下,...
介数中心性计算的基本思想是统计所有其他节点对之间的最短路径中,经过某个特定节点的路径数量。这个数量越大,表明该节点在图中的介数中心性越高,即其在传播信息、资源等方面具有更高的影响力。 首先,我们需要...
在实际应用中,遍历磁盘路径可以用于多种用途,如文件备份、文件搜索、统计文件数量或大小、清理无用文件等。同时,需要注意处理可能的安全问题,比如访问权限、循环引用(目录循环包含自身)以及性能优化,尤其是在...
- **具体操作**:当开发人员在某个平台上编写并编译Java程序时,会生成字节码文件(.class文件),这些字节码文件是由JVM解释执行的。因此,只要确保目标平台上有合适的JVM,程序就能运行。 ### 2. path与classpath...
在这个方法里,我们可以添加统计代码,例如增加计数器。以下是一个简单的Filter实现示例: ```java import javax.servlet.*; import java.io.IOException; public class AccessCountFilter implements Filter { ...
- `path`:数据文件路径。 #### 主要逻辑流程 1. **数据读取**:通过`ReaderFileLine.listFileByRegionRow`方法读取指定范围内的数据行。 2. **初始化聚类中心**:随机选择一部分样本作为初始聚类中心,并标记这些...
SourceMonitor是一款功能强大的代码行统计工具,主要用于测试多种编程语言(包括但不限于C++、C、C#、VB.net、Java、Delphi、VisualBasic和HTML)的源代码文件,并提供代码数量和性能的数据分析。它不仅可以帮助...
本题要求编写代码判断101到200之间的所有素数,涉及数学中的素数概念以及编程中的条件判断和循环控制。 #### 题目三:水仙花数 **知识点**:水仙花数(Narcissistic number)是指一个n位数,它的每个位上的数字的n...
引用计数法通过统计所有对象的引用数量来判断,但存在循环引用问题。可达性分析则通过一系列GC Roots对象,以它们为起点进行遍历来识别哪些对象是可达的。 常见的垃圾回收算法包括标记清除算法、复制算法、标记整理...
而平均情况分析则是对所有可能情况下的执行时间进行统计平均。 - **均摊分析** - 均摊分析用于分析一系列操作的总成本,而不是单个操作的成本。适用于某些数据结构(如动态数组)的操作。 #### 线性表 - **...
为了进行ArcEngine代码GP邻域分析,开发者需要掌握以下编程语言之一:C#、VB.NET或Java,并具备基本的编程技能。通过阅读提供的"ArcEngine代码GP邻域分析之焦点.html"文件,可以获取具体的代码示例和实现步骤,以便...
1. **理解问题**:明确统计的目标是什么,例如统计出现次数最多的元素、满足某个条件的元素数量等。 2. **数据预处理**:对原始数据进行清洗,去除无效或冗余信息。 3. **选择算法**:根据问题的特点选择合适的统计...
- 提供了代码统计信息,如函数参数数量、行数等,有助于理解代码结构。 - 支持自定义语法高亮规则,增强代码可读性。 5. **搜索与替换**: - 强大的搜索功能允许用户在整个项目范围内查找特定字符串或正则表达式...
第2章(\代码\第02章) • sample01.htm 将JavaScript代码插入在标签与标签之间 • sample02.htm 将JavaScript代码放在了标签与标签之间 • sample03.htm JavaScript与HTML混合执行 • ...
### ArcGIS Runtime SDK for Java Guide 100.4.0 #### 一、概览与安装 **ArcGIS Runtime SDK for Java** 是一个强大的工具包,由 Esri 提供,用于开发基于 Java 的地理信息系统 (GIS) 应用程序。此版本(100.4.0)...
例如,如果需要统计某个投票题目下各个选项的投票数量,则可以使用子查询的方式: ```sql SELECT v.questionVotingId, q.title, COUNT(v.questionVotingId) AS num FROM VotingRecord v INNER JOIN ...