Leitura de Arquivos

7 respostas
G

Galera preciso de uma classe para leitura de arquivos, onde o arquivo deverá ter extensão .dat, ja criei o codigo mais preciso apenas da leitura do arquivo para testá-lo. O codigo é um somador de bits.
Segue o codigo:

//Verificando se tem alguma expressao que nao pode ser reconhecida [b]
for(int j = 0;j<n.length;j++){
                if(!(n[j].equals("00"))&&!(n[j].equals("01"))&&!(n[j].equals("10"))&&!(n[j].equals("11")))
                    erro++;
            }
            if(erro>0){
                ps.println("Expressão Invalida");
                ps.println("");
                ps.println("");
                continue;
            }
//--------------------------------------------------------
            
            i = -1;
            S0();//Chamando funcao para inicio do automato
            
            

//--------------------------------------------------------
            //imprimindo no arquivo de saida
            
            String[] separa = new String[2];
            for(int j=1;j<=2;j++){
                for(int i=0;i<n.length;i++){
                    separa = n[i].split("");                
                    ps.print(""+separa[j]);
                }ps.println("");
            }
            ps.println("-----------------");
                        
            for(int i = saida.size()-1 ; i >= 0 ; i-- )
                ps.print(""+saida.get(i));
            
         //   ps.println("");
        //   
            ps.print(" que é igual a ");
            decimal = 0;
            for(int i = saida.size()-1 ; i >= 0 ; i-- ){
                ps.print(""+saida.get(i)+"x2^"+i+" + ");  
                decimal += Integer.parseInt(""+saida.get(i)) * Math.pow(2,i);
            }
            ps.println(" = "+decimal);
          
            ps.println("");
            ps.println("");
             
             
            //Limpando lista de saida
            for(int i = saida.size()-1 ; i >= 0 ; i-- )
                saida.remove(i);
        }     
        //Fechando arquivos
        s.close();
        ps.close(); 
    }
        
    //Metodo que representa o estado S0
    public static void S0(){
        i++;
        if(i == n.length){//se chegou ao final
            saida.add(0);
            return;
        }
        if (n[i].equals("00")){
            saida.add(0);            
            S0();
        }else if(n[i].equals("01") || n[i].equals("10")){
            saida.add(1);
            S1();            
        }else if(n[i].equals("11")){
            saida.add(0);
            S2();
        }        
    }
    //Metodo que representa o estado S1
    public static void S1(){
        i++;
        if(i == n.length){//se chegou ao final
            saida.add(0);
            return;
        }
        if (n[i].equals("00")){
            saida.add(0);
            S0();
        }else if(n[i].equals("01") || n[i].equals("10")){
            saida.add(1);
            S1();
        }else if(n[i].equals("11")){
            saida.add(0);
            S2();
        }
    }
    //Metodo que representa o estado S2
    public static void S2(){
        i++;
        if(i == n.length){//se chegou ao final
            saida.add(1);
            return;
        }
        if (n[i].equals("00")){
            saida.add(1);
            S1();
        }else if(n[i].equals("01") || n[i].equals("10")){
            saida.add(0);
            S2();
        }else if(n[i].equals("11")){
            saida.add(1);
            S3();
        }
    }
    //Metodo que representa o estado S3
    public static void S3(){
        i++;
        if(i == n.length){//se chegou ao final
            saida.add(1);
            return;
        }
        if (n[i].equals("00")){
            saida.add(1);
            S1();
        }else if(n[i].equals("01") || n[i].equals("10")){
            saida.add(0);
            S2();
        }else if(n[i].equals("11")){
            saida.add(1);
            S3();
        }
    }
    
}[/b]

7 Respostas

fjvasconcellos

Olá genre sena!!

Não entendi muito bem a sua pergunta, vc precisa de uma classe que leia um arquivo, e te retorne oque??

Uma String, uma Char[]?

ps: Use a tag CODE para postar codigos… facilita a leitura…

G

Foi corrigido já com a tag Code desculpe-me, mas quanto ao codigo, preciso apenas de uma classe ou função para leitura de um arquivo onde terá por exemplo:
Entrada:
01 11 01 00
01 10 11 12
01 10 11 11
10 11 00 11 10

Saida:

0100
1110

01001 que é igual a 0x2^4 + 1x2^3 + 0x2^2 + 0x2^1 + 1x2^0 + = 9.0
Expressão Invalida // isto significa que a 2ª expressão lida não foi compativel
0111
1011

11011 que é igual a 1x2^4 + 1x2^3 + 0x2^2 + 1x2^1 + 1x2^0 + = 27.0
11011
01010

100101 que é igual a 1x2^5 + 0x2^4 + 0x2^3 + 1x2^2 + 0x2^1 + 1x2^0 + = 37.0

fjvasconcellos

No caso, vc precisa de uma classe que leia um arquivo e retorne o conteudo que está nele, para vc utilizar em seu codigo?

tipo:

String s = lerAqruivo(“nome do arquivo”);

ai vc utilizaria essa string cheia de 0 e 1 no seu programa?

Será que entendi bem?

G

Exatamente isso, preciso da função para ler estas strings testá-las no meu codigo e dar a saida no arquivo com resultado do teste, como esta no arquivo de saída que passei anteriormente…

fjvasconcellos

Tente Usar essa classe, ela lê um arquivo e tbm salva o conteudo alterado no mesmo arquivo;

package testaleitura;

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

public class ReadAndSave {

    private File f;
    private String nomeArquivo,  textoLido,  textoSalvar;
    private FileReader leitor;
    private BufferedReader leitorBuffer;
    private StringBuffer conteudoArquivo = new StringBuffer();
    private FileWriter gravador;
    private BufferedWriter gravadorBuffer;

    public ReadAndSave(String nomeArquivo) {
        this.nomeArquivo = nomeArquivo;
    }

    private void lerAquivo() {
        try {
            f = null;
            f = new File(nomeArquivo);
            leitor = new FileReader(f);
            leitorBuffer = new BufferedReader(leitor);
            do {
                textoLido = leitorBuffer.readLine();
                if (textoLido != null) {
                    conteudoArquivo.append(textoLido);
                }
            } while (textoLido != null);

            textoLido = conteudoArquivo.toString();
            conteudoArquivo = null;
            conteudoArquivo = new StringBuffer();
            leitor.close();
            leitorBuffer.close();
        } catch (FileNotFoundException ex) {
            JOptionPane.showMessageDialog(null, "O arquivo não existe!",
                    "Erro de Leitura", JOptionPane.ERROR_MESSAGE);
        } catch (IOException ex) {
            JOptionPane.showMessageDialog(null, "Erro de leitura do arquivo!",
                    "Erro Fatal", JOptionPane.ERROR_MESSAGE);
        }
    }

    public String getConteudoArquivo() {
        lerAquivo();
        return textoLido;
    }

    public void setConteudoGravacao(String conteudo) {
        textoSalvar = conteudo;
    }

    private void gravarArquivo() {
        try {
            f = null;
            f = new File(this.nomeArquivo);
            gravador = new FileWriter(f);
            gravadorBuffer = new BufferedWriter(gravador);
            gravadorBuffer.write(textoSalvar);
            gravadorBuffer.close();
            gravador.close();
        } catch (FileNotFoundException ex) {
            JOptionPane.showMessageDialog(null, "O arquivo não existe!",
                    "Erro de Gravação", JOptionPane.ERROR_MESSAGE);
        } catch (IOException ex) {
            JOptionPane.showMessageDialog(null, "Erro de gravação do arquivo!",
                    "Erro Fatal", JOptionPane.ERROR_MESSAGE);
        }
    }
}
Funciona da seguinte maneira:
public static void main(String args[]) {
        ReadAndSave rs = new ReadAndSave(String); // String = nome do seu arquivo ou caminho completo

        //lendo arquivo
        String conteudo = rs.getConteudoArquivo();

        //Salvar arquivo
        String conteudoModificado;
        rs.setConteudoGravacao(conteudoModificado);

    }

Tente rodar ai, espero ter ajduado...

Abraços!

G

Não deu muito certo pois a escrita de ser em outro arquivo, mais valeu pela atenção…

fjvasconcellos

Para salvar em outrto arquivo, vc precisa apenas mudar o nome do arquivo onde vai ser salvo.

altere o método:

public void setConteudoGravacao(String conteudo) {   
        textoSalvar = conteudo;   
    }

para:

public void setConteudoGravacao(String conteudo, String nomeNovoArquivo) {   
        textoSalvar = conteudo;
        nomeArquivo = nomeNovoArquivo;
        gravarArquivo(); 
    }

Assim vc irá passar o conteudo alterado e o novo nome para o aquivo.

Não se esqueça de que se precisar abrir o arquivo com a Entrada novamente, vc terá de alterar o nome,
sendo assim de null no objeto ReadAndSave e new novamenta passando o nome do arquivo de entrada.

ReanAndSave seuObjeto = null;
         seuObjeto = new ReadAndSave("arquivo entrada");

E depois chame o metodo de leitura novamente...

Acho que funciona assim...

flws!!!

ps: oo método antigo para gravar faltava chamar a função: gravarArquivo();
public void setConteudoGravacao(String conteudo) {     
        textoSalvar = conteudo;
        gravarArquivo();     
    }
Criado 14 de setembro de 2008
Ultima resposta 14 de set. de 2008
Respostas 7
Participantes 2