package filedemo;
 
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
 
/**
 * 缓冲流: BufferedReader readline() ------允许一次性读取一行数据
 *
 * 练习: 统计java代码的行数
 *
 * 创建一个file对象代表workspace,获取这个file对象下的所有子文件和子目录,如果
 * 是子文件,判断这个文件是否是一个java文件,如果是java文件,按行读取,统计行数;
 * 如果是子目录,获取子目录下的子文件和子目录----后续的要求和当前函数一致----利用递归实现
 */
public class FileDemo1 {
	public static void main(String[] args) {
		Score score = new Score();
		ListFile(new File("D:\\Stars"), score);
	}
 
	public static void read_java(String file) {// 定义形参 要读取java文件的路径
		try {
			// 定义要读取的文件
			FileInputStream fis = new FileInputStream(file);
			InputStreamReader isr = new InputStreamReader(fis);
			BufferedReader br = new BufferedReader(isr);
			String line = null;
			int index = 1;
			while ((line = br.readLine()) != null) {
				System.out.println(index + ":" + line);
				index++;
			}
			br.close();
		} catch (Exception e) {
			System.out.println("在读取java文件代码的时候出现未知错误!");
 
		} finally {
			System.out.println("文件读取完毕!");
		}
	}
 
	public static void ListFile(File file, Score score) {// 用于读取文件夹中的文件 //形参是需要进行遍历的路径
		if (file.isDirectory()) {// 是否是文件夹
			File[] a = file.listFiles();// 获取路径下的所有文件以及文件夹存放在 数组中
			for (int i = 0; i < a.length; i++) {// 遍历得到目录下的所有文件夹以及文件
				System.out.println(a[i]);
				if (file.isDirectory()) {
					ListFile(a[i], score);
				}
				if (a[i].getName().endsWith(".java")) {
					read_java(a[i].getAbsolutePath());
					score.score++;
				}
			}
		}
		System.out.println("java文件总共有:" + score.score + "个");
	}
}
 
class Score {// 用于计java有多少个
	int score;
}