Dica de como contar linhas do projeto

4 respostas
rso1988

Fala galera blz?!

Por algumas vezes percebi que várias pessoas têm dúvidas quanto ao saber sobre as estatísticas do seu projeto, como quantidades de linhas e quantidade de classes.
Como era uma curiosidade minha tb…hehe…aí acabei criando um programinha que pudesse fazer isso pra mim. Aí resolvi compartilhar com a galera.

Como funciona:

Ao iniciar, ele pede pra colocar o diretório do seu projeto, o qual situa todas as suas classes, exemplo: “C:\Meu projeto”
Após dar “Ok”, é só aguardar que ele irá realizar a contagem e irá gerar um relatório que será salvo dentro desse diretório que vc colocou, informando a quantidade de pastas, classes e linhas de todas as classe juntas…ahh…um detalhe, ele informa tb, a quantidade de linhas de cada classe separadamente.

Pra que tiver interesse segue abaixo o código

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import javax.swing.JOptionPane;

/**
 * @author rafael
 */
public class ContaLinhas{

	/**
	 * Declaração dos atributos
	 */
	private String subDir;  
	private int somaLinhas = 0;
	private int somaClasses = 0;
	private int somaDiretorios = 0;
	private String out = "";

	/**
	 * Método main
	 * @param args
	 */
	public static void main(String[] args) {

		ContaLinhas cl = new ContaLinhas ();
		String path = JOptionPane.showInputDialog("Diretório do projeto: "); 
		cl.contador(path);

		/**
		 * Apresenta os resultados no console
		 */
		System.err.println("\nSub-pastas do projeto = " + cl.getSomaDiretorios() + " pastas");
		System.err.println("Classes do projeto = " + cl.getSomaClasses() + " classes");
		System.err.println("Linhas de codigo do projeto = " + cl.getSomaLinhas() + " linhas");

		/**
		 * Adiciona os resultados obtidos ao atributo "out", o qual será gravado no arquivo
		 */
		cl.setOut("\n\n\n\n=============================================" + 
				"\nSub-pastas do projeto = " + cl.getSomaDiretorios() + " pastas" + 
				"\nClasses do projeto = " + cl.getSomaClasses() + " classes" + 
				"\nLinhas de codigo do projeto = " + cl.getSomaLinhas() + " linhas");
		
		cl.gravaArquivoTxt(path, cl);
	}

	/**
	 * Realiza a gravação dos resultados obtidos
	 * @param path
	 */
	public void gravaArquivoTxt (String path, ContaLinhas cl){

		try{      

			/**
			 * Grava no arquivo
			 */
			File file = new File(path + "/Restult.txt");  
			FileWriter fw = new FileWriter(file, true );
			PrintWriter ps = new PrintWriter(fw, true );  
			ps.println(cl.getOut());  

			JOptionPane.showMessageDialog(null, "Um arquivo com os resultados foi gerado no diretório do seu projeto!", "Informação", JOptionPane.INFORMATION_MESSAGE);

		}catch( IOException e ){

			e.printStackTrace();  
		}

	}

	/**
	 * Faz a contagem de linhas de todo projeto
	 * @param path
	 */
	public void contador (String path){

		File diretorios = new File(path);  
		File[] files = diretorios.listFiles();

		/** 
		 * É feita uma iteração com o vetor que armazenou o path dos arq. e dirs. do dir. recebido como parâmetro inicial **/
		for(int i = 0;i < files.length; i++) {

			/** 
			 * Verifica se o camniho da posição atual do vetor "files", é um arq. ou um dir., caso for um dir., ele entra no if **/
			if (files[i].isDirectory()){

				/**
				 *  Incrementa o atributo "SomaDiretorios" **/
				setSomaDiretorios(1);

				/** 
				 * Atribui o caminho do próximo diretório à variável "subDir", e mostra o dir.no console **/
				subDir = files[i].toString();
				setOut("\n\nPath = " + subDir);
				System.out.println("\nPath = " + subDir);

				try{

					/** 
					 * Carrega em memória todos os "paths" de dirs. e arqs. que estão dentro do path armazenado em "subDir" **/
					File dir = new File(subDir);  
					File[] file = dir.listFiles();		

					/** 
					 * Faz uma iteração com o vetor "file" **/
					for(int j = 0; j < file.length; j++)  
					{  

						/** 
						 * Carrega em memória o path da posição atual do vetor "file" **/
						File f = new File(file[j].getPath());

						/** 
						 * Verifica se a posição atual do vetor "file" é um dir. caso não, ele entra **/
						if (!(file[j].isDirectory()) && file[j].getPath().endsWith(".java")){

							/**
							 *  Armazena em buffer todo conteúdo do arquivo **/
							BufferedReader arquivo = new BufferedReader(new FileReader(f));  
							int somaAux = 0;

							/** 
							 * Enquanto não for final do arquivo ele persiste no laço **/
							while((arquivo.readLine()) != null){  

								/**
								 *  A cada iteração é correspondido a uma linha nova, assim o atributo "somaLinhas" é incrementado **/
								setSomaLinhas(1);
								somaAux++;
							}  

							int lastSlashIndex = file[j].getPath().lastIndexOf('/');

							/**
							 *  Mostra na tela o arquivo + sua quantidade de linhas **/					
							System.err.println(file[j].getPath().substring(lastSlashIndex + 1) + " = " + somaAux + " linhas");
							setOut("\n\t " + file[j].getPath().substring(lastSlashIndex + 1) + " = " + somaAux + " linhas");

							/**
							 *  O atributo "somaClasses" é incrementado à cada arquivo lido **/
							setSomaClasses(1);
						}
					}

				}catch (Exception e){

					e.printStackTrace();
				}

				/**
				 *  Chama recursivamente a função, só que agora com o próximo nível de diretório, 
				 *  assim consecutivamente até que o último subdiretório seja encontrado.
				 */
				contador(subDir);
			}	
		}
	}

	/**
	 * Seta o atributo "somaLinhas"
	 */
	public void setSomaLinhas (int somaLinhas){

		this.somaLinhas = this.somaLinhas + somaLinhas;
	}

	/**
	 * Retorna o valor do atributo "somaLinhas"
	 * @return
	 */
	public int getSomaLinhas (){

		return this.somaLinhas;
	}

	/**
	 * Seta o atributo "somaClasses"
	 */
	public void setSomaClasses (int somaClasses){

		this.somaClasses = this.somaClasses + somaClasses;
	}

	/**
	 * Retorna o valor do atributo "somaClasses"
	 * @return
	 */
	public int getSomaClasses (){

		return this.somaClasses;
	}

	/**
	 * Seta o atributo "somaDiretorios"
	 */
	public void setSomaDiretorios (int somaDiretorios){

		this.somaDiretorios = this.somaDiretorios + somaDiretorios;
	}

	/**
	 * Retorna o valor do atributo "somaDiretorios"
	 * @return
	 */
	public int getSomaDiretorios (){

		return this.somaDiretorios;
	}

	/**
	 * Seta o atributo "out"
	 */
	public void setOut (String out){

		this.out = this.out + out; 
	}

	/**
	 * Retorna o valor do atributo "out"
	 * @return
	 */
	public String getOut (){

		return this.out;
	}
}

Vlw pessoal!

4 Respostas

jessetsilva

muito bacana sua iséia, vou testar e depois digo o resultado, parabens! :smiley:

Tche

Show cara!!

Parabéns!

Ficou muito legal mesmo.

Dá pra fazer um projeto legal com esta idéia!

renzonuccitelli

Como eu uso Elclipse, costumo usar o Metrics Plugin. Ele gera um relatório sobre todo o projeto, com várias metricas…

Pedrosa

Legal funciona certinho!

Criado 24 de novembro de 2008
Ultima resposta 24 de nov. de 2008
Respostas 4
Participantes 5