import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;
public class CodeCount {
static int count = 0;
static ArrayList ignore_folder = new ArrayList();
static ArrayList ignore_ext = new ArrayList();
static{
//忽略的文件后缀
ignore_ext.add(".jar");
ignore_ext.add(".class");
ignore_ext.add(".classpath");
ignore_ext.add(".project");
//忽略的文件夹
ignore_folder.add("resources");
ignore_folder.add("classes");
ignore_folder.add(".settings");
ignore_folder.add("META-INF");
}
static void readLineCount(File _f){
if(_f != null){
String ext = _f.getPath();
//文件后缀
for(String _ext:ignore_ext){
if(ext.endsWith(_ext)){
//System.out.println("文件后缀:"+ext);
return;
}
}
//文件夹
for(String _folder:ignore_folder){
if(ext.indexOf(_folder) > -1){
//System.out.println("文件夹:"+ext);
return;
}
}
}
//System.out.println(_f.getPath());
//定义字符流读取文件
FileReader fileReader = null;
try {
fileReader = new FileReader(_f);
}catch(IOException e){
e.printStackTrace();
}
// 从字节流中升级为字符流,方便按行读取。
BufferedReader bufferedReader = new BufferedReader(fileReader);
try {
while (bufferedReader.readLine() != null) {
count++;
}
} catch (IOException e) {
e.printStackTrace();
} finally {
if (fileReader != null) {
try {
fileReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return;
}
static void recursionFolder(File f){
if(f != null && !f.exists()){
System.out.println("文件夹不存在:"+f.getPath());
return;
}
for(File _f:f.listFiles()){
//是文件
if(_f.isFile()){
readLineCount(_f);
}
if(_f.isDirectory()){
recursionFolder(_f);
}
}
}
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
System.out.println("请输入要统计代码的文件夹:");
String pfolder = s.nextLine();
System.out.println(pfolder);
File folder = new File(pfolder);
recursionFolder(folder);
System.out.println("代码总行数:"+count);
}
}