package top.linruchang.bilibili;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
public class FileLineCount {
private static ArrayList<File> fileList = new ArrayList<File>();
private static ArrayList<File> tempFileList = new ArrayList<File>();
public static int sumLineCount(String targetPath, String... types) {
File file = new File(targetPath);
List<File> files = getFiles(file, types);
int sum = 0;
for (File f : files) {
sum += fileLineCount(f);
}
return sum;
}
public static List<File> getFiles(File file, String... types) {
List<File> AllFiles = queryFiles(file);
for (File f : AllFiles) {
for (String type : types) {
if (isType(f, type)) {
fileList.add(f);
}
}
}
return fileList;
}
private static List<File> queryFiles(File file) {
File[] files = file.listFiles();
if (files == null) {
tempFileList.add(file);
return tempFileList;
} else if (files.length == 0) {
return tempFileList;
} else {
for (File f : files) {
queryFiles(f);
}
}
return tempFileList;
}
public static boolean isType(File file, String type) {
String fileName = file.getName();
String fileType = fileName.substring(fileName.lastIndexOf(".") + 1);
if (type.equals(fileType)) {
return true;
}
return false;
}
public static int fileLineCount(File file) {
String fileName = file.getName();
String fileType = fileName.substring(fileName.lastIndexOf(".") + 1);
int lineCount = 0;
BufferedReader br = null;
try {
switch (fileType) {
case "java": {
FileReader fr = new FileReader(file);
br = new BufferedReader(fr);
String line;
while(true) {
line = br.readLine();
if(line == null) {
break;
}
if((line.length() == 1 && "\n".equals(line)) || (line.length() == 1 && "\r".equals(line))) {
continue;
}
if((line.length() == 2 && "\r\n".equals(line))) {
continue;
}
if(line.contains("package") || line.contains("import") || line.contains("@Override") || line.contains("//")) {
continue;
}
if(line.contains("*")) {
continue;
}
++lineCount;
}
break;
}
case "html": {
FileReader fr = new FileReader(file);
br = new BufferedReader(fr);
String line;
while(true) {
line = br.readLine();
if(line == null) {
break;
}
++lineCount;
}
break;
}
default: {
FileReader fr = new FileReader(file);
br = new BufferedReader(fr);
String line;
while(true) {
line = br.readLine();
if(line == null) {
break;
}
++lineCount;
}
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (br != null) {
br.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return lineCount;
}
public static void clear() {
tempFileList.clear();
fileList.clear();
}
public static void main(String[] args) {
FileLineCount.clear();
String[] types = {"java"};
int lineCount = sumLineCount("E:\\eclipse\\workspace\\学习\\src\\top\\linruchang\\dao", types);
System.out.println(lineCount);
}
}