Java如何快速获取代码行数的高效方法?
- 后端开发
- 2025-05-28
- 8
通过逐行读取文件统计
适用于本地文件或项目源码的直接分析。
import java.io.BufferedReader; import java.io.File; import java.io.FileReader; public class LineCounter { public static int countLines(File file) throws Exception { int lines = 0; try (BufferedReader reader = new BufferedReader(new FileReader(file))) { while (reader.readLine() != null) { lines++; } } return lines; } public static void main(String[] args) throws Exception { File codeFile = new File("src/main/java/com/example/MyClass.java"); System.out.println("代码行数:" + countLines(codeFile)); } }
特点:
- 优点:无需依赖第三方库,适合快速实现。
- 缺点:需自行处理空行、注释行过滤等问题。
使用Apache Commons IO库
通过现成工具类简化统计流程,适合需要批量处理文件的场景。
import org.apache.commons.io.FileUtils; import java.io.File; import java.util.Collection; public class CommonsLineCounter { public static void main(String[] args) { Collection<File> files = FileUtils.listFiles( new File("src/main/java"), new String[]{"java"}, true ); long totalLines = files.stream() .mapToLong(file -> FileUtils.lineCount(file)) .sum(); System.out.println("总代码行数:" + totalLines); } }
特点:
- 优点:代码简洁,支持文件过滤和递归遍历。
- 缺点:需引入commons-io依赖。
结合JavaParser解析语法结构
适用于需要区分有效代码行与注释的场景。
import com.github.javaparser.JavaParser; import com.github.javaparser.ast.CompilationUnit; import java.io.FileInputStream; public class SyntaxAwareCounter { public static void main(String[] args) throws Exception { CompilationUnit cu = JavaParser.parse(new FileInputStream("src/main/java/com/example/MyClass.java")); int codeLines = cu.toString().split("n").length; System.out.println("有效代码行数(含结构):" + codeLines); } }
特点:
- 优点:可排除注释(需结合遍历AST树实现)。
- 缺点:统计结果包含语法结构,可能需进一步处理。
通过Maven插件自动化统计
在构建过程中集成代码行统计,适合持续集成场景。

在pom.xml中添加插件:
<build> <plugins> <plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>exec-maven-plugin</artifactId> <version>3.0.0</version> <executions> <execution> <phase>compile</phase> <goals> <goal>java</goal> </goals> </execution> </executions> <configuration> <mainClass>com.example.LineCounter</mainClass> </configuration> </plugin> </plugins> </build>
特点:
- 优点:与构建流程集成,支持自动化。
- 缺点:需熟悉Maven配置。
注意事项与优化建议

