public
class
ReadFile {
/**
*
@param
args
*
@throws
IOException
*/
public
static
void
main(String[] args)
throws
IOException {
Long globalNum = 0L;
// 总行数
List<Long> lineNums =
new
ArrayList<Long>();
List<String> exceptFileNames =
new
ArrayList<String>();
exceptFileNames.add(
"project2"
);//不统计目录
exceptFileNames.add(
"test"
);
//不统计目录
String path =
"D:\\source\\project"
;//项目目录
File file =
new
File(path);
traversalFile(file, lineNums, exceptFileNames);
for
(Long num : lineNums) {
globalNum = globalNum + num;
}
System.
out
.println(globalNum);
// 310375
}
/**
* 得到目录的叶子java文件,并统计文件里有多少行,将行数放到list中
*
*
@param
file
*
@throws
IOException
*/
public
static
void
traversalFile(File file, List<Long> lineNums,
List<String> exceptFileNames)
throws
IOException {
File[] childList = file.listFiles();
String fileName =
null
;
String extra =
null
;
for
(File child : childList) {
fileName = child.getName();
if
(child.isDirectory()) {
if
(exceptFileNames !=
null
&& !exceptFileNames.contains(child.getName())) {
traversalFile(child, lineNums, exceptFileNames);
}
}
else
{
extra = fileName.contains(
"."
) ? fileName.substring(fileName
.lastIndexOf(
"."
)) : fileName;
if
(extra.equals(
".java"
) || extra.equals(
".jsp"
)
|| extra.equals(
".js"
)) {
System.
out
.println(child.getName().substring(
child.getName().lastIndexOf(
"."
)));
lineNums.add( getLineNum(child));
}
}
}
}
/**
* 得到某个文件有多少行(非目录)
*
*
@param
file
*
@return
*
@throws
IOException
*/
public
static
long
getLineNum(File file)
throws
IOException {
long
num = 0L;
FileInputStream f =
new
FileInputStream(file);
BufferedReader dr =
new
BufferedReader(
new
InputStreamReader(f));
String line = dr.readLine();
while
(line !=
null
) {
if
(!line.trim().equals(
""
)) {
num++;
}
line = dr.readLine();
}
return
num;
}
}