Ler arquivo e remover Strings duplicadas

Publicado por Mayron Cachina 24/09/2007

[ Hits: 13.801 ]

Homepage: http://mayroncachina.net

Download LerTexto.zip




Pessoal, uma pequena aplicação para exercitar a escrita de arquivos...

Tive algumas dúvidas no começo de como ler todo o vetor e retirar as strings com duplicidade...

O código está todo comentado para melhor compreenção.

Mas ai está de um modo simples, fácil e descomplicado...

  



Esconder código-fonte

package br.com.dragon.utils.lerArquivo.exec;

import java.io.*;
import java.util.*;

public class Main {
    public String file;
    public static String origem;
    public static String destino;
    
    public Main(String file){
        this.file = file;
    }
    
    public void lerTexto() throws IOException{
        // VARIÁVEL ONDE SERÁ GUARDADA A LINHA PERCORRIDA
        String line = "";
        // Usamos os BufferedReader para abrir o arquivo.
        BufferedReader  bf = new BufferedReader(new FileReader(this.file));
        // Instanciamos uma collection para guardar o nosso conteúdo
        Collection lista = new ArrayList();
        // variáveis para contagem de linhas (só pra ficar mais bonitinho, hehehe)
        int linhaT = 0;
        int linhaF = 0;
        
        /* AQUI SERÁ ONDE VAMOS PREENCHER NOSSA LISTA */
        while ((line = bf.readLine()) != null)  {
            System.out.println("PERCORRENDO LINHA: " + linhaT++);
            // COMANDO PRA PREENCHER A LISTA "line"
            lista.add(line);
        }
        
        /* AQUI SERÁ O TRATAMENTO  
         * DA LISTA A SER SALVA
         * SEM REPETIÇÕES....
         */
        // O MÉTODO "LinkedHashSet" SERVE PARA NÃO EMBARALHAR A LISTA 
        // QUE NO CASO O COMANDO "HashSet" faz...
        Collection lista2 = new LinkedHashSet(lista);
        // CRIA O NOVO ARQUIVO ONDE SERÁ ARMAZENADA A LISTA
        File arquivo = new File(destino);
        
        // ABRE O ARQUIVO DE DESTINO PARA A GRAVAÇÃO
        BufferedWriter bw = new BufferedWriter(new FileWriter(arquivo));
        // PERCORRE TODA A NOVA LISTA
        for (Object item : lista2){
            linhaF++;
            /* ESCREVE A LISTA NO ARQUIVO...
             * OBSERVE O TYPECAST FEITO POIS O 
             * FOR ESTÁ PASSANDO UM "Object"
             */
            bw.write((String) item);
            bw.newLine();
        }
        
        bw.flush();
        bw.close();
        
        System.out.println("VARREDURA COMPLETA...");
        System.out.println("TOTAL DE LINHAS NOVO ARQUIVO: " + linhaF);
    }
    
    
    public static void main(String[] args) {
        origem  = args[0];
        destino = args[1];
  
        Main l = new Main(origem);
        
        try{
            l.lerTexto();
        }catch (IOException ioe) {
            ioe.printStackTrace();
        }
        System.out.println("CONCLUIDO...");
    }
}

Scripts recomendados

Utilizando a classe File

ImagemFacil 1.0, um editor de imagens recheado de recursos

Copia de um arquivo para outro

Operar o linux pelo celular

Grava linhas de um arquivo


  

Comentários
[1] Comentário enviado por washington.titan em 08/10/2007 - 17:40h

Mas seu programa nao funciona
O seu for naum esta dando certo porque???

[2] Comentário enviado por mayroncachina em 08/10/2007 - 18:50h

Olá washington.titan, acabei de rodar o mesmo código copiado e colado do aqui do site...
Funcionou direitinho...

coloquei em um arquivo txt as seguintes frases:
viva o linux
viva o linux
fora windows
Tio Bill
Tio Bill

e quando executei o comando:
java -jar LerArquivo.jar C:\log.txt C:\resposta.txt

ele me retornou:
viva o linux
fora windows
Tio Bill


Compilei com o Netbeans 5.5.1, acho muito pouco provável que seja a IDE que tenha dado problema...
Qual o FOR que vc disse q ta dando erro?!

[3] Comentário enviado por felipemartinsss em 28/08/2009 - 10:42h

Se a versão do Java for inferior a 1.5 o for abaixo pode apresentar problemas
for (Object item : lista2)

É o enhanced for. Substituir esse for por aquele for comum com um contador pode resolver.

Abraços


Contribuir com comentário