import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.io.LineNumberReader;
public class FileLineCounter {
private String mFolderPath;
private int mLineCount, fileCount;
private static final String DIVIDER = "**********************************************";
public FileLineCounter(String mFolderPath) {
this.mFolderPath = mFolderPath;
}
public void run() {
System.out.println("开始文件检索:");
traverseFolder(mFolderPath);
System.out.println("一共有" + fileCount + "个文件," + mLineCount + "行代码");
}
private void traverseFolder(String path) {
File file = new File(path);
if (file.exists()) {
File[] files = file.listFiles();
if (null == files || files.length == 0) {
System.out.println("文件夹是空的!");
} else {
for (File file2 : files) {
if (file2.isDirectory()) {
traverseFolder(file2.getAbsolutePath());
} else {
System.out.println(DIVIDER);
fileCount++;
System.out.println("* 第" + fileCount + "个文件");
System.out.println("* 文件名:" + file2.getAbsolutePath());
countLine(file2);
}
}
}
} else {
System.out.println("文件/文件夹不存在!");
}
}
private void countLine(File file) {
try {
if (file.exists()) {
FileReader fr = new FileReader(file);
LineNumberReader lnr = new LineNumberReader(fr);
int linenumber = 0;
while (lnr.readLine() != null) {
linenumber++;
}
System.out.println("* 单个文件行数 " + linenumber);
System.out.println(DIVIDER);
System.out.println();
mLineCount = mLineCount + linenumber;
lnr.close();
} else {
System.out.println("文件不存在!");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
用法:如果要统计“D:\javaProject\javaTest\src\Main.java”这样单文件的行数
public class Main {
public static void main(String[] args) {
FileLineCounter counter = new FileLineCounter("D:\\javaProject\\javaTest\\src\\Main.java");
counter.run();
}
}
2.如果要统计某一文件夹下的所有文件(D:\javaProject\javaTest\src文件夹下有很多文件)
public class Main {
public static void main(String[] args) {
FileLineCounter counter = new FileLineCounter("D:\\javaProject\\javaTest\\src");
counter.run();
}
}
3.如果文件夹下有多层文件夹/文件混搭(D:\javaProject文件夹下有很多文件/文件夹)
public class Main {
public static void main(String[] args) {
FileLineCounter counter = new FileLineCounter("D:\\javaProject");
counter.run();
}
}
看看输出结果吧
**********************************************
* 第681个文件
* 文件名:D:\androidProject\yxg-master-kotlin\app\src\main\java\com\yxg\worker\widget\viewpagerindicator\TitlePageIndicator.java
* 单个文件行数 872
**********************************************
**********************************************
* 第682个文件
* 文件名:D:\androidProject\yxg-master-kotlin\app\src\main\java\com\yxg\worker\widget\viewpagerindicator\UnderlinePageIndicator.java
* 单个文件行数 406
**********************************************
**********************************************
* 第683个文件
* 文件名:D:\androidProject\yxg-master-kotlin\app\src\main\java\com\yxg\worker\widget\XEditText.java
* 单个文件行数 546
**********************************************
**********************************************
* 第684个文件
* 文件名:D:\androidProject\yxg-master-kotlin\app\src\main\java\com\yxg\worker\YXGApp.kt
* 单个文件行数 468
**********************************************
一共有684个文件,162662行代码
Process finished with exit code 0