public class LineCounter { public static void main(String[] args) { String path = "D:/workspace/LineCounter"; int count = getAllJavaFilesLineCount(new File(path)); System.out.println("總行數:" + count); } /** * 使用遞歸實現統計這個文件夾中(包含子孫文件夾中的)的所有.java文件的總行數 * * @param dir * 文件夾 * @return */ private static int getAllJavaFilesLineCount(File dir) { int count = 0; for (File file : dir.listFiles()) { // 如果是.java文件,就統計行數 if (file.isFile() && file.getName().endsWith(".java")) { count += FileUtils.getLineCount(file); } // 如果是文件夾,就遞歸調用 else if (file.isDirectory()) { count += getAllJavaFilesLineCount(file); } } return count; } }
public class FileUtils { /** * 讀取指定文件的內容,返回總行數 * * @param file * @return */ public static int getLineCount(File file) { if (!file.isFile()) { throw new IllegalArgumentException("請指定一個有效的文件對象!"); } try { BufferedReader reader = new BufferedReader(new FileReader(file)); int count = 0; while (reader.readLine() != null) { count++; } reader.close(); return count; } catch (Exception e) { throw new RuntimeException(e); } } }