代码量统计程序报错

Quincy650 2018-02-01 05:41:37
求助大佬。报出空指针的异常,不知道是什么情况。
代码如下:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

//代码测试工具(开正经代码行数,注释行数,空白行数)
//测试最近正则表达式Demo的代码情况
public class Demo10 {
static int i, j, k;

public static void main(String[] args) {
File file = new File("F:\\java测试用例\\Test0\\src\\");
String[] buff = file.list();
for (String filename : buff) {
Code(filename);
}
System.out.println("空白行有:" + i + "行");
System.out.println("注释行有:" + j + "行");
System.out.println("代码行有:" + k + "行");
}

public static void Code(String string) {
boolean a = false;// 多行注释的标志位,如果匹配到/* 则置为true;然后继续读取行,如果匹配到*/ 则置为false 跳出循环(详情见下面代码)
String string1 = null;
// 读取磁盘文件内容
try {
BufferedReader stream0 = new BufferedReader(new FileReader("F:\\java测试用例\\Test0\\src\\" + string));
String string2 = stream0.readLine();
while (string2 != null) {
string1 = string2.concat("\r\n");// 解决readLine()不返回回车换行符的问题
// 空白行
if ((string1.matches("^\\s*\\n$")) == true) {
i++;
}
// 单行注释
else if ((string2.matches("\\s*//.*")) == true) {
j++;
}
// 多行注释
else if ((string2.matches("\\s*/\\*.*")) == true) {
a = true;
j++;
while (a == true) {
string2 = stream0.readLine();
if ((string2.matches("\\s*.*\\*/")) == true) {
a = false;
j++;
} else {
j++;
}
}
// 代码行
} else {
k++;
}
string2 = stream0.readLine();
}

// 关闭流
stream0.close();
} catch (FileNotFoundException e) {
System.out.println("没有找到文件");
e.printStackTrace();
} catch (IOException e) {
System.out.println("流读取失败");
e.printStackTrace();
}

}

}


如果在主函数只调用一次函数Code(),则不会报错;如果循环调用,则报错。求助。
...全文
889 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
oO临时工Oo 2018-02-26
  • 打赏
  • 举报
回复
~~~~~~~~~~~~~~~Test CSDN BUG~~~~~~~~~~~~~~~~~~~~~~~~
Quincy650 2018-02-23
  • 打赏
  • 举报
回复
已解决,感谢大家。源文件中用多行注释的方法注释了单行并且放在了最后一行,结果readLine()方法读取到最后已经为null,又再次进行匹配正则表达式, 所以抛出了空指针的异常。
  • 打赏
  • 举报
回复
你code()是静态方法,换成普通方法试试
oO临时工Oo 2018-02-01
  • 打赏
  • 举报
回复
具体看报什么错。 BufferedReader stream0 = new BufferedReader(new FileReader("F:\\java测试用例\\Test0\\src\\" + string)); 这一行,如果string所指示的文件是个目录,肯定会报错了。应该加个判断。
         String path = "F:\\java测试用例\\Test0\\src\\" 
			File file = new File(path, string);
			if(file.isDirectory()){
				return;
			}

62,612

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧