先用java写了个:
package java2.pack2;
import com.google.common.collect.Sets;
import com.google.common.io.Files;
import java.io.*;
import java.nio.charset.Charset;
import java.util.HashSet;
import java.util.Objects;
/**
* Created by fhqplzj on 16-10-24 at 上午9:51.
*/
public class Stat {
private int num = 0;
private HashSet<String> exts = Sets.newHashSet("java", "scala");
private void dfs(File file) {
if (file != null) {
if (file.isFile()) {
num += singleFile(file);
} else {
File[] files = file.listFiles();
Objects.requireNonNull(files);
for (File aFile : files) {
if (aFile.isDirectory()) {
dfs(aFile);
} else {
num += singleFile(aFile);
}
}
}
}
}
private int singleFile2(File file) {
String extension = Files.getFileExtension(file.getAbsolutePath()).toLowerCase();
int result = 0;
if (exts.contains(extension)) {
try {
result = Files.asCharSource(file, Charset.defaultCharset()).readLines().size();
} catch (IOException e) {
e.printStackTrace();
}
}
return result;
}
@Deprecated
private int singleFile(File file) {
int result = 0;
String ext = Files.getFileExtension(file.getAbsolutePath()).toLowerCase();
if (exts.contains(ext)) {
LineNumberReader lineNumberReader = null;
try {
lineNumberReader = new LineNumberReader(new FileReader(file));
lineNumberReader.skip(file.length());
result = lineNumberReader.getLineNumber();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (lineNumberReader != null) {
try {
lineNumberReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
return result;
}
public static void main(String[] args) {
File file = new File("/home/fhqplzj/github/spark-2.0.0");
Stat stat = new Stat();
stat.dfs(file);
System.out.println("stat.num = " + stat.num);
}
}
package java2.pack2;
import com.google.common.collect.Sets;
import com.google.common.io.Files;
import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.HashSet;
import java.util.Objects;
/**
* Created by fhqplzj on 16-10-24 at 上午9:51.
*/
public class Stat {
private int num = 0;
private HashSet<String> exts = Sets.newHashSet("java", "scala");
private void dfs(File file) {
if (file != null) {
if (file.isFile()) {
num += singleFile(file);
} else {
File[] files = file.listFiles();
Objects.requireNonNull(files);
for (File aFile : files) {
if (aFile.isDirectory()) {
dfs(aFile);
} else {
num += singleFile(aFile);
}
}
}
}
}
private int singleFile(File file) {
String extension = Files.getFileExtension(file.getAbsolutePath());
int result = 0;
if (exts.contains(extension)) {
try {
result = Files.asCharSource(file, Charset.defaultCharset()).readLines().size();
} catch (IOException e) {
e.printStackTrace();
}
}
return result;
}
public static void main(String[] args) {
File file = new File("/home/fhqplzj/github/spark-2.0.0");
Stat stat = new Stat();
stat.dfs(file);
System.out.println("stat.num = " + stat.num);
}
}
再用bash写了个:
#!/usr/bin/env bash
find /home/fhqplzj/github/spark-2.0.0 -type f -name "*.java" -o -name "*.scala" | xargs cat | wc -l
统计spark源码总行数:
java统计结果为:
921810
bash统计结果为:
921793
有一定的误差,大概就是92万行。