本主题地址:http://bbs.laoer.com/main-read-5-ff8080811b48b90c011ccfd374c85da2.html
[楼主] 主题:请教各位大虾
tianyi_zhangtf(tianyi_zhangtf)
[置顶] [锁定] [推荐] [保留] [精华] 支持 :0 反对 :0 IP
Face

发帖:5
精华:0
积分:19
等级:初出江湖
社区币:100
来自:湖北省武汉市
注册:2008-08-15
最后登录:11-05 17:35
 
有个问题:找出一个目录下所有的java文件,包括子目录,并统计这些java文件的正常代码,注释代码,和空白代码.
package regular;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Test {

private long whiteLines = 0;//空白行

private long normalLines = 0;//代码行

private long commentLines = 0;//注释行

private ArrayList list1 = new ArrayList();//保存所有文件的数组

private ArrayList list2 = new ArrayList();//保存过滤文件的数组

public static void main(String[] args) {
Test t = new Test();
t.analysis("E:\\学习\\临时\\bbb");
t.dir("E:\\学习\\临时\\bbb");//列出该文件夹下所有文件,包括子目录
System.out.println("空白行:"+t.whiteLines);
System.out.println("代码行:"+t.normalLines);
System.out.println("注释行:"+t.commentLines);

}

public void directory(File f){
File [] fs = f.listFiles();
for(int j = 0;j<fs.length;j++){
if(fs[j].isDirectory()){
directory(fs[j]);
}else if(fs[j].getName().matches(".*\\.java$")){
list2.add(fs[j]);
}else{
list1.add(fs[j]);
}
}
}

public void dir(String url){
File f = new File(url);
File [] f1 = f.listFiles();
for(int j = 0;j<f1.length;j++){
if(f1[j].isDirectory()){
directory(f1[j]);
}else if(f1[j].getName().matches(".*\\.java$")){
list2.add(f1[j]);
}else{
list1.add(f1[j]);
}

}

Iterator it1 = list1.iterator();
while(it1.hasNext()){
System.out.println(it1.next());
}

Iterator it2 = list2.iterator();
while(it2.hasNext()){
System.out.println(it2.next());
}
}

public void analysis(String url) {
File f = new File(url);

File[] files = f.listFiles(new FilenameFilter() {

public boolean accept(File dir, String name) {
return name.indexOf(".java") != -1;
}
});

for (int i = 0; i < files.length; i++) {
parse(files[i]);
}

}

private void parse(File file) {
BufferedReader br = null;
boolean comment = false;//标记/**/中间是否为注释行
try {
br = new BufferedReader(new FileReader(file));
String line = "";
while ((line = br.readLine()) != null) {
line = line.trim();//去除注释时的空白串
if (line.matches("^[\\s&&[^\\n]]*$")) {//空行代码
whiteLines++;
} else if (line.startsWith("/*") && !line.endsWith("*/")) {//注释行/**/
commentLines++;
comment = true;
} else if (true == comment) {
commentLines++;
if (line.endsWith("*/")) {
comment = false;
}
} else if(line.startsWith("//")){
commentLines++;
}
else {//代码行
normalLines++;
}

}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (br != null) {
try {
br.close();
} catch (IOException e) {
e.printStackTrace();
}
br = null;
}
}
}

}
但是总满足不了要求,请大家指点啊
 
2008-10-06 09:44:13
[1楼] 主题:Re:请教各位大虾
tianyi_zhangtf(tianyi_zhangtf)
[推荐] [保留] [精华] 支持 :0 反对 :0 IP
Face

发帖:5
精华:0
积分:19
等级:初出江湖
社区币:100
来自:湖北省武汉市
注册:2008-08-15
最后登录:11-05 17:35
 
我将文件下的java文件保存在了arraylist数组中,可是取出来分析这些文件的时候就不对了
 
2008-10-06 09:46:15
[分页: 1] [只看楼主] [返回]
快速回复
文章标题
文章内容
·用户请确认您发表的言论符合《互联网电子公告服务管理规定》《全国人大常委会关于维护互联网安全的规定》规定,并符合本论坛的主旨。
·本社区用户不得在本社区发表包含破坏宪法和法律、破坏民族团结、捏造或者歪曲事实、宣扬封建迷信、淫秽、色情,及其他违反宪法和法律行政法规的言论。
·本社区用户因为违反本社区规定而触犯中华人民共和国法律的,责任自负。
社区搜索
推荐主题