Lendou um arquivo qualquer e exibindo linha, caracteres e seu conteúdo

1 - Queria fazer o código usando um JOptionPane se possivel ou outro componente gráfico
2 - Escolher o arquivo em uma arvore de diretorios
3 - Não consegui contar quantas palavras
4 - Não consegui contar quantos caracteres tinha no arquivo

Se alguém puder me ajudar desde já agradesso sou iniciante e não seu criar muita coisa em java

import java.io.*;

public class leArquivo {

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

{
BufferedReader arquivo = new BufferedReader(new java.io.FileReader(“arquivo.txt”));

  String linha= ""; 

  int numeroCaracteres = 0; 
  int totalPalavras = 0;
  
  while (arquivo.ready()) 
  { 
     try 
     { 
linha+=arquivo.readLine(); 
totalPalavras += linha.length();
numeroCaracteres += linha.length(); 
     } 

     catch (Exception ex) 

      { 

ex.printStackTrace(); 

      } 
	
  System.out.println( "Strings concatenadas do arquivo: "+ linha );
  System.out.println( "Total de palavras do arquivo: " + totalPalavras );
  System.out.println( "Total de caracteres do arquivo : " +   numeroCaracteres );
     }

}
}

queria que vc dese uma lida nessa aula:

http://www.guj.com.br/posts/list/50115.java

flw :smiley:

Primeiramente, seja bem-vindo ao GUJ!
Dá uma lida no tópico que o Camilo falou! :wink:

Bem, vamos ao seu programa.

Já dá para notar algo muito errado. Se o número de palavras é diferente do número de caracteres, por que você está fazendo a mesma soma?

totalPalavras += linha.length();
numeroCaracteres += linha.length();

Esses dois certamente darão o mesmo resultado.

Para escolher um arquivo, use um JFileChooser.

Finalmente, acostume-se com a convenção! Nomes de classe com a primeira letra maiúscula! :slight_smile:

Aqui está o seu código corrigido e comentado.

Para o seu próprio bem, entenda, não só copie, ok?

Note que seu algoritmo estava praticamente certo. Eu comentei os locais onde alterei o código e o porque da alteração.

Embora o tamanho do código assuste, ele está praticamente igual ao seu. Só os comentários e os imports deixaram ele tão grande. :wink:

[code]
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;

import javax.swing.JFileChooser;
import javax.swing.JOptionPane;

public class LeArquivo {
public static void main(String args[]) throws Exception {
//Primeiramente, vamos usar o JFileChooser para escolher o arquivo
JFileChooser fileChooser = new JFileChooser();
if (fileChooser.showOpenDialog(null) == JFileChooser.CANCEL_OPTION) {
System.exit(0);
}

    File file = fileChooser.getSelectedFile();
    
    //Agora faremos a leitura do arquivo
    BufferedReader arquivo = new BufferedReader(new FileReader(file));
    
    String linha = "";

    int numeroCaracteres = 0;
    int totalPalavras = 0;
    int totalLinhas = 0;

    while (arquivo.ready()) {
        //Lemos a linha. 
        //Como só nos interessa contar a linha atual, 
        //usamos o operador = ao invés de +=. 
        linha = arquivo.readLine();
        totalLinhas++;

        //Imprimimos a linha no console. 
        //Todo conteúdo pode ser grande para ficar num JOptionPane.
        System.out.println(linha);
        
        //Somamos o número de caracteres
        numeroCaracteres += linha.length();
        
        //O split é um comando que separa as palavras de uma string
        //de acordo com um caractere. Ele gera um array com as 
        //palavras separadas.
        
        //Por exemplo, um split("i") na String "Vinicius", geraria
        //um array contendo ["V", "n", "c", "us"].
        //Para contar as palavras, vamos fazer um split nos espaços
        //e somar o tamanho do array.
        
        //Vamos fazer isso também só para linhas que não estão em 
        //branco. É isso que o if testa.
        
        if (linha.trim().length() &gt 0) {
            totalPalavras += linha.split("\s").length;
        }
    }
    
    //Agora exibimos o resultado
    StringBuilder sb = new StringBuilder("<HTML><BODY>Resultado da contagem");
    sb.append("<p><b>Quantidade de linhas:</b>").append(totalLinhas);
    sb.append("<br><b>Quantidade de palavras:</b> ").append(totalPalavras);
    sb.append("<br><b>Quantidade de caracteres: </b> ").append(numeroCaracteres);
    sb.append("</BODY></HTML>");
    JOptionPane.showMessageDialog(null, sb.toString());
}

}[/code]

Obrigado Cara.
Vcs são feras mesmo.