世界杯门票_托马斯穆勒世界杯进球数 - noh16.com

世界杯门票_托马斯穆勒世界杯进球数 - noh16.com

shape
  • Home
  • 夏奇拉世界杯
  • 统计java代码行数和jar包中*.class代码的行数

统计java代码行数和jar包中*.class代码的行数

  • 2025-09-18 09:37:52
  • admin

大家好,又见面了,我是全栈君。

代码语言:javascript代码运行次数:0运行复制自己写了一个简单的小工具,统计一下指定项目路径下java行数和指定路径下jar包中.class 文件的代码行数。

具体内容如下:代码语言:javascript代码运行次数:0运行复制1:统计指定目录下所有的*.java 文件的代码行数,文件为JavaTotal.java(可单独运行);代码语言:javascript代码运行次数:0运行复制import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.File;

import java.io.FileReader;

import java.io.FileWriter;

import java.io.IOException;

import java.io.PrintWriter;

import java.util.ArrayList;

import java.util.List;

/**

* 统计指定项目的目录下的*.java代码行数

* @author aflyun

* @date 2016.02.16

* @version 1.0

*/

public class JavaTotal {

//项目java文件所在目录

public static String javaPath = "D:/KuYuPrograms/tclshop/src/";

//统计代码行数

public static Integer countCode = 0;

public static int runJavaTotal(){

try {

File filetxtPath = new File("D:/javaFileCount.txt");//输出要统计的文件信息

PrintWriter pw = new PrintWriter(new FileWriter(filetxtPath));

List list = total(javaPath);

for (File file : list) {

String javaName = file.getAbsolutePath().replace("\\", "/");

if(javaName.endsWith(".java")){

pw.println(javaName);

}

}

pw.println("总共java文件数量 :" + list.size());

pw.close();

System.err.println("java文件数量:"+list.size());

countJavaLine(list);

System.err.println("java中总代码行数:" + countCode);

} catch (Exception e) {

// TODO: handle exception

}

return countCode;

}

/**

* 获取所有的文件

* @param path 获取文件的路径

* @return

*/

public static List total(String path){

List fileList = null;

try {

fileList = new ArrayList();

File filePath = new File(path);

File[] files = filePath.listFiles();//listFiles能够获取当前文件夹下的所有文件和文件夹

for (File file : files) {

if(file.isFile() && file.getName().endsWith(".java")){

fileList.add(file);

}else {

fileList.addAll(fileList.size(), total(file.getPath()));

}

}

} catch (Exception e) {

// TODO: handle exception

}

return fileList;

}

/**

* 统计项目中java代码的行数

* @param listFile 文件的集合

*/

public static void countJavaLine(List listFile){

try {

for (File file : listFile) {

if(file.getName().endsWith(".java")){

FileReader fr = new FileReader(file);

BufferedReader br = new BufferedReader(fr);

String line = "";

while((line = br.readLine()) != null){

countCode ++;

}

}

}

} catch (Exception e) {

System.err.println("统计java代码行数出错!");

}

}

//==========================================================================================//

public static void main(String[] args) throws IOException {

long start = System.nanoTime();

runJavaTotal();

long end = System.nanoTime();

System.out.print("cost: " + (end - start)/1e9 + " seconds");

}

}

2:统计指定目录下所有的*.jar 包中*.class 文件的代码行数,文件为 JarTotal.java(可单独运行)

代码语言:javascript代码运行次数:0运行复制package com.dufy.test;

import java.io.BufferedReader;

import java.io.File;

import java.io.FileWriter;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.PrintWriter;

import java.net.URL;

import java.util.Enumeration;

import java.util.HashSet;

import java.util.Set;

import java.util.jar.JarEntry;

import java.util.jar.JarFile;

/**

* 统计指定路径下面jar包文件中所有*.class 文件的代码行数

* @author aflyun

* @date 2016.02.16

* @version 1.0

*/

public class JarTotal {

//jar包存放的仓库位置

public static String jarPath = "D:/KuYuPrograms/repository/com/aebiz";

//存放所有的jar的包路径和名称

public static Set jarList = new HashSet();

//统计jar包总代码行数

public static int countCode = 0;

public static int runJarTotal() {

try {

File filetxtPath = new File("D:/jarFileCount.txt");//输出要统计的文件信息

PrintWriter pw = new PrintWriter(new FileWriter(filetxtPath));

File file = new File(jarPath);

findAllJarFiles(file);

for (String jarName : jarList) {

pw.println(jarName); //将jar文件写入txt中

Set findAllJarClassfiles = findAllJarClassfiles(jarName);

for (String jarClassFileName : findAllJarClassfiles) {

countJarLine(jarName,jarClassFileName);

}

}

pw.println("总共jar文件数量 :" + jarList.size());

pw.close();

System.err.println("jar包文件数量 : "+ jarList.size());

System.err.println("jar包中总代码行数 : "+ countCode);

} catch (Exception e) {

// TODO: handle exception

}

return countCode;

}

/**

* 遍历获取所有的jar包文件路径和名称

* @param dir 目标路径

*/

public static void findAllJarFiles(File dir) {

try {

//获取当前文件夹下的所有文件和文件夹

File[] files = dir.listFiles();

for(int i = 0; i < files.length; i++){

// System.out.println(fs[i].getAbsolutePath());

String jspPath = files[i].getAbsolutePath().replace("\\", "/");

if(jspPath.endsWith(".jar")){

//System.out.println(jspPath);

jarList.add(jspPath);

}

//如果是文件夹,递归

if(files[i].isDirectory()){

findAllJarFiles(files[i]);

}

}

} catch (Exception e) {

System.err.println("获取所有的jar包路径和名称出错!");

}

}

/**

* 获取jar包目录下所有的class文件

* @param jarName jar包的路径和名称

* @return 返回对应jar包下所有.class 文件的集合

*/

public static Set findAllJarClassfiles(String jarName){

//存放jar包下对应的文件路径和名称

Set jarFileList = new HashSet();

try {

JarFile jarFile = new JarFile(jarName);

Enumeration entries = jarFile.entries();

while(entries.hasMoreElements()){

JarEntry jarEntry = entries.nextElement();

String fileName = jarEntry.getName();

if(fileName.endsWith(".class")){

//System.out.println(fileName);

jarFileList.add(fileName);

}

}

} catch (IOException e) {

System.err.println("获取jar包下的所有class出错!");

}

return jarFileList;

}

/**

* 构造URI/URL格式的文件路径

* 统计所有jar包中所有class文件的代码行数

* @param jarName jar包的路径和名称

* @param jarClassFileName jar包下所有文件.class 文件的路径和名称

* @throws IOException

*/

public static void countJarLine(String jarName,String jarClassFileName) {

try {

URL url = new URL("jar:file:/"+jarName+"!/"+jarClassFileName+"");

//System.out.println(url);

InputStream is=url.openStream();

BufferedReader br=new BufferedReader(new InputStreamReader(is));

String line = "";

while((line = br.readLine())!=null){

countCode ++;

}

} catch (Exception e) {

System.err.println("统计jar包总代码数出错!");

}

}

//==========================================================================================//

public static void main(String[] args) throws Exception {

long start = System.nanoTime();

runJarTotal();

long end = System.nanoTime();

System.out.print("cost: " + (end - start)/1e9 + " seconds");

}

}

3:调用1、2中的工具类,统计出 项目中指定路径下 *.java 和指定jar包中*.class 的总代码行数,文件为 CountTotalMain.java

代码语言:javascript代码运行次数:0运行复制package com.dufy.test;

/**

* 统计项目中所有代码的行数

* 1: .java文件中代码

* 2: jar包中的文件代码

* @author aflyun

*

*/

public class CountTotalMain {

public static void main(String[] args) {

long start = System.nanoTime();

int runJavaTotal = JavaTotal.runJavaTotal();

int runJarTotal = JarTotal.runJarTotal();

System.out.println("java总代码: " + runJavaTotal +"----jar总代码: " + runJarTotal);

System.out.println("项目中总代码之和为 : " + (runJarTotal + runJavaTotal));

long end = System.nanoTime();

System.out.println("cost: " + (end - start)/1e9 + " seconds");

}

}发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/121281.html原文链接:https://javaforall.cn

<<<
Previous Post
诲人不倦的解释

Copyright © 2088 世界杯门票_托马斯穆勒世界杯进球数 - noh16.com All Rights Reserved.

友情链接