我的设计思路:
两个按钮:一个选择目录;一个统计行数;
一个面板:输出内容用,使用f.list()列出文件夹下全部文件,然后一个一个地统计行数,最后总的统计一下。
I code:
窗口类就省略了……
1、文件集合类的
public class IList {
public static int fileCount = 0;
public static int sumCount = 0;
public static void sumLines(String s, JTextArea jta){
int sum = 0;
File f = new File(s);
if (f.isDirectory()) {
//此时IFiles将是一个数组,形如{"1.java","2.java","3.java"}之类
String[] iFiles = f.list(new IFilter());
if (iFiles.length != 0) {
//System.out.println("数组长度即文件数量为:" + iFiles.length);
fileCount += iFiles.length;//文件的数量和
jta.append("统计 " + f.getAbsolutePath() + "\\*.java\n\n");
for (int i = 0; i < iFiles.length; i++) {
String str = iFiles[i];//文件名
iFiles[i] = s + "\\" + iFiles[i];//全路径名
int count = IFileCountLine.countLine(iFiles[i]);
jta.append(str + " " + count + " 行\n");
sum += count;
}
sumCount += sum;//代码的行数和
jta.append("\n小计:共 " + iFiles.length + " 个Java文件 " + sum + " 行");
jta.append("\n==================================================================\n");
}
File[] iFiles2 = f.listFiles();
for (int i = 0; i < iFiles2.length; i++) {
sumLines(iFiles2[i].getAbsolutePath(), jta);
}
}
}
}
2、Filter过滤器继承FilenameFilter并实现其方法即可。
3、统计算法
FileReader fr = new FileReader(f);
BufferedReader br = new BufferedReader(fr);
String s = br.readLine();
while (s != null) {
count++;
s = br.readLine();
}
效果如图: