[Resolvido] RandomAccessFile gravando caracteres do além

Pessoal, eu tenho um arquivo de contantos, onde eu preciso editar os contatos que estao dentro, para isso eu utilizo o RandomAccessFile, onde eu leio todo o arquivo, e regravo utilizando um replace na linha que eu preciso que seja alterada…

até ai beleza, o que ta me deixando intrigado é uns caracteres que o RandomAccessFile está gravando…

a estrutura do arquivo é a seguinte…

luiz henrique ;csi;analista ;06/12/1987;Almirante Pedro Álvares Cabral;PR;São José dos Pinhais;83040530;Boneca do Iguaçu

para gravar é uma maravilha, uso o file writer e fica igualzinho essa linha de cima… ai quando eu resolvo editar a linha com o RandomAccessFile olha só os caracteres que ele coloca

gabriela henrique;csi;analista;06/12/1987;Almirante Pedro ����lvares Cabral;PR;S���£o Jos���© dos Pinhais;83040530 ;Boneca do Igua���§u

a estrutura esta sendo gravada corretamente o problema são esses caracteres do mal…

segue o trecho de codigo responsavel por essa folia…

[code]
public void editarContato(int pos, String nomeAltera ,String nomeAntigo, String novaEmpresa, String novoCargo, String novoAniversario, String novoLogradouro,String novoEstado, String novaCidade,String novoCep, String novoBairro) throws ParseException {

    BufferedReader leitor = null;
        
    try {
   //    File f = new File("resources/cursos2.txt");
   //     leitor = new BufferedReader(new FileReader(f));
       ArrayList<String> linhas = new ArrayList<String>();
         RandomAccessFile arquivo = 
         new RandomAccessFile("resources/contatos.txt", "rw");
         
        
        String linha = null;

        while ((linha = arquivo.readLine()) != null) {

            String[] elems = linha.split(";");
            String nome = elems[0];
            String empresa = elems[1];
            String cargo = elems[2];
            String aniversario = elems[3];
            String logradouro = elems[4];
            String estado = elems[5];
            String cidade = elems[6];
            String cep = elems[7];
            String bairro = elems[8];
            
            String formato = "dd/MM/yyyy"; 
            Date data =  new SimpleDateFormat(formato).parse(aniversario);
            
           // 
           System.out.println(linha);
            
            if (nome.equals(nomeAntigo)) {
               // cursos.add(new Curso(curso, centroLocal, site));
              String linhareescrita = null;
                linhareescrita = linha.replaceAll(linha,nomeAltera+ ";"+ novaEmpresa +  ";" + novoCargo + ";" + novoAniversario + ";"+ novoLogradouro + ";" + novoEstado + ";" + novaCidade + ";" + novoCep + ";" + novoBairro); 
                System.out.print(linhareescrita);
                linhas.add(linhareescrita);
             //   fw.write(linhareescrita + "\n");
                
                   
            }else
            //fw.write(linha + "\n");
               linhas.add(linha);
                   
                   
          //  System.out.println(linha);
        }
        FileWriter fw  = new FileWriter("resources/contatos.txt");
       for (int i = 0; i < linhas.size(); i ++){
           System.out.println(linhas.get(i));
          if (i >0 ){ fw.append(System.getProperty("line.separator")); 
          }
            fw.write(linhas.get(i));
      
    //  System.out.println(linhas.get(i));
       
       }
        fw.close();
        
        
        
        
    } catch (IOException e) {
        throw new RuntimeException(e);
    } finally {
        if (leitor != null) {
            try {
                leitor.close();
                
            } catch (IOException e) { /* ignorado */ }
        }
    }

}[/code]

abraço a todos…

Olá galera, sou novo no GUJ, e nao sei como postar um novo tópico.
Sei que parece idiotisse, mas…
Alguem pode me ajudar?

Use o método writeUTF() do RandomAcessFile e veja se seu problema foi resolvido.
Achei engraçado caracteres do além, rsrsrs.
Isso aconteceu por causa do encode do arquivo.

[quote=lkava]Pessoal, eu tenho um arquivo de contantos, onde eu preciso editar os contatos que estao dentro, para isso eu utilizo o RandomAccessFile, onde eu leio todo o arquivo, e regravo utilizando um replace na linha que eu preciso que seja alterada…

até ai beleza, o que ta me deixando intrigado é uns caracteres que o RandomAccessFile está gravando…

a estrutura do arquivo é a seguinte…

luiz henrique ;csi;analista ;06/12/1987;Almirante Pedro Álvares Cabral;PR;São José dos Pinhais;83040530;Boneca do Iguaçu

para gravar é uma maravilha, uso o file writer e fica igualzinho essa linha de cima… ai quando eu resolvo editar a linha com o RandomAccessFile olha só os caracteres que ele coloca

gabriela henrique;csi;analista;06/12/1987;Almirante Pedro ����lvares Cabral;PR;S���£o Jos���© dos Pinhais;83040530 ;Boneca do Igua���§u

a estrutura esta sendo gravada corretamente o problema são esses caracteres do mal…

segue o trecho de codigo responsavel por essa folia…

[code]
public void editarContato(int pos, String nomeAltera ,String nomeAntigo, String novaEmpresa, String novoCargo, String novoAniversario, String novoLogradouro,String novoEstado, String novaCidade,String novoCep, String novoBairro) throws ParseException {

    BufferedReader leitor = null;
        
    try {
   //    File f = new File("resources/cursos2.txt");
   //     leitor = new BufferedReader(new FileReader(f));
       ArrayList<String> linhas = new ArrayList<String>();
         RandomAccessFile arquivo = 
         new RandomAccessFile("resources/contatos.txt", "rw");
         
        
        String linha = null;

        while ((linha = arquivo.readLine()) != null) {

            String[] elems = linha.split(";");
            String nome = elems[0];
            String empresa = elems[1];
            String cargo = elems[2];
            String aniversario = elems[3];
            String logradouro = elems[4];
            String estado = elems[5];
            String cidade = elems[6];
            String cep = elems[7];
            String bairro = elems[8];
            
            String formato = "dd/MM/yyyy"; 
            Date data =  new SimpleDateFormat(formato).parse(aniversario);
            
           // 
           System.out.println(linha);
            
            if (nome.equals(nomeAntigo)) {
               // cursos.add(new Curso(curso, centroLocal, site));
              String linhareescrita = null;
                linhareescrita = linha.replaceAll(linha,nomeAltera+ ";"+ novaEmpresa +  ";" + novoCargo + ";" + novoAniversario + ";"+ novoLogradouro + ";" + novoEstado + ";" + novaCidade + ";" + novoCep + ";" + novoBairro); 
                System.out.print(linhareescrita);
                linhas.add(linhareescrita);
             //   fw.write(linhareescrita + "\n");
                
                   
            }else
            //fw.write(linha + "\n");
               linhas.add(linha);
                   
                   
          //  System.out.println(linha);
        }
        FileWriter fw  = new FileWriter("resources/contatos.txt");
       for (int i = 0; i < linhas.size(); i ++){
           System.out.println(linhas.get(i));
          if (i >0 ){ fw.append(System.getProperty("line.separator")); 
          }
            fw.write(linhas.get(i));
      
    //  System.out.println(linhas.get(i));
       
       }
        fw.close();
        
        
        
        
    } catch (IOException e) {
        throw new RuntimeException(e);
    } finally {
        if (leitor != null) {
            try {
                leitor.close();
                
            } catch (IOException e) { /* ignorado */ }
        }
    }

}[/code]

abraço a todos…

[/quote]

[quote=rdgse]Use o método writeUTF() do RandomAcessFile e veja se seu problema foi resolvido.
Achei engraçado caracteres do além, rsrsrs.
Isso aconteceu por causa do encode do arquivo.

[quote=lkava]Pessoal, eu tenho um arquivo de contantos, onde eu preciso editar os contatos que estao dentro, para isso eu utilizo o RandomAccessFile, onde eu leio todo o arquivo, e regravo utilizando um replace na linha que eu preciso que seja alterada…

até ai beleza, o que ta me deixando intrigado é uns caracteres que o RandomAccessFile está gravando…

a estrutura do arquivo é a seguinte…

luiz henrique ;csi;analista ;06/12/1987;Almirante Pedro Álvares Cabral;PR;São José dos Pinhais;83040530;Boneca do Iguaçu

para gravar é uma maravilha, uso o file writer e fica igualzinho essa linha de cima… ai quando eu resolvo editar a linha com o RandomAccessFile olha só os caracteres que ele coloca

gabriela henrique;csi;analista;06/12/1987;Almirante Pedro ����lvares Cabral;PR;S���£o Jos���© dos Pinhais;83040530 ;Boneca do Igua���§u

a estrutura esta sendo gravada corretamente o problema são esses caracteres do mal…

segue o trecho de codigo responsavel por essa folia…

[code]
public void editarContato(int pos, String nomeAltera ,String nomeAntigo, String novaEmpresa, String novoCargo, String novoAniversario, String novoLogradouro,String novoEstado, String novaCidade,String novoCep, String novoBairro) throws ParseException {

    BufferedReader leitor = null;
        
    try {
   //    File f = new File("resources/cursos2.txt");
   //     leitor = new BufferedReader(new FileReader(f));
       ArrayList<String> linhas = new ArrayList<String>();
         RandomAccessFile arquivo = 
         new RandomAccessFile("resources/contatos.txt", "rw");
         
        
        String linha = null;

        while ((linha = arquivo.readLine()) != null) {

            String[] elems = linha.split(";");
            String nome = elems[0];
            String empresa = elems[1];
            String cargo = elems[2];
            String aniversario = elems[3];
            String logradouro = elems[4];
            String estado = elems[5];
            String cidade = elems[6];
            String cep = elems[7];
            String bairro = elems[8];
            
            String formato = "dd/MM/yyyy"; 
            Date data =  new SimpleDateFormat(formato).parse(aniversario);
            
           // 
           System.out.println(linha);
            
            if (nome.equals(nomeAntigo)) {
               // cursos.add(new Curso(curso, centroLocal, site));
              String linhareescrita = null;
                linhareescrita = linha.replaceAll(linha,nomeAltera+ ";"+ novaEmpresa +  ";" + novoCargo + ";" + novoAniversario + ";"+ novoLogradouro + ";" + novoEstado + ";" + novaCidade + ";" + novoCep + ";" + novoBairro); 
                System.out.print(linhareescrita);
                linhas.add(linhareescrita);
             //   fw.write(linhareescrita + "\n");
                
                   
            }else
            //fw.write(linha + "\n");
               linhas.add(linha);
                   
                   
          //  System.out.println(linha);
        }
        FileWriter fw  = new FileWriter("resources/contatos.txt");
       for (int i = 0; i < linhas.size(); i ++){
           System.out.println(linhas.get(i));
          if (i >0 ){ fw.append(System.getProperty("line.separator")); 
          }
            fw.write(linhas.get(i));
      
    //  System.out.println(linhas.get(i));
       
       }
        fw.close();
        
        
        
        
    } catch (IOException e) {
        throw new RuntimeException(e);
    } finally {
        if (leitor != null) {
            try {
                leitor.close();
                
            } catch (IOException e) { /* ignorado */ }
        }
    }

}[/code]

abraço a todos…

[/quote][/quote]
Cara eu usei, mas aí bagunçou mais ainda rsrsrs…
acho que é porque eu utilizo o formato de arquivo ANSI…

mas olha informação importante, o fdp responsavel por isso é o RANDONACCESSFILE

eu faço o seguinte, leio o arquivo que ja existe, mudo apenas a linha que eu quero e gravo tudo de novo…

o erro é na hora de ler, nessa parte do codigo olha…

[code] ArrayList linhas = new ArrayList();
RandomAccessFile arquivo =
new RandomAccessFile(“resources/contatos.txt”, “rw”);

            String linha = null;

            while ((linha = arquivo.readLine()) != null) {

                String[] elems = linha.split(";");
                String nome = elems[0];
                String empresa = elems[1];
                String cargo = elems[2];
                String aniversario = elems[3];
                String logradouro = elems[4];
                String estado = elems[5];
                String cidade = elems[6];
                String cep = elems[7];
                String bairro = elems[8];

                String formato = "dd/MM/yyyy"; 
                Date data =  new SimpleDateFormat(formato).parse(aniversario);[/code]

Nesse momento da leitura, ele está lendo com esses caracteres, como eu utilizo esses caras que foram lidos, na hora de gravar vai gravar com os caracteres do além =D…

[quote=rdgse]Use o método writeUTF() do RandomAcessFile e veja se seu problema foi resolvido.
Achei engraçado caracteres do além, rsrsrs.
Isso aconteceu por causa do encode do arquivo.

[quote=lkava]Pessoal, eu tenho um arquivo de contantos, onde eu preciso editar os contatos que estao dentro, para isso eu utilizo o RandomAccessFile, onde eu leio todo o arquivo, e regravo utilizando um replace na linha que eu preciso que seja alterada…

até ai beleza, o que ta me deixando intrigado é uns caracteres que o RandomAccessFile está gravando…

a estrutura do arquivo é a seguinte…

luiz henrique ;csi;analista ;06/12/1987;Almirante Pedro Álvares Cabral;PR;São José dos Pinhais;83040530;Boneca do Iguaçu

para gravar é uma maravilha, uso o file writer e fica igualzinho essa linha de cima… ai quando eu resolvo editar a linha com o RandomAccessFile olha só os caracteres que ele coloca

gabriela henrique;csi;analista;06/12/1987;Almirante Pedro ����lvares Cabral;PR;S���£o Jos���© dos Pinhais;83040530 ;Boneca do Igua���§u

a estrutura esta sendo gravada corretamente o problema são esses caracteres do mal…

segue o trecho de codigo responsavel por essa folia…

    public void editarContato(int pos, String nomeAltera ,String nomeAntigo, String novaEmpresa, String novoCargo, String novoAniversario, String novoLogradouro,String novoEstado, String novaCidade,String novoCep, String novoBairro) throws ParseException {

        BufferedReader leitor = null;
            
        try {
       //    File f = new File("resources/cursos2.txt");
       //     leitor = new BufferedReader(new FileReader(f));
           ArrayList<String> linhas = new ArrayList<String>();
             RandomAccessFile arquivo = 
             new RandomAccessFile("resources/contatos.txt", "rw");
             
            
            String linha = null;

            while ((linha = arquivo.readLine()) != null) {

                String[] elems = linha.split(";");
                String nome = elems[0];
                String empresa = elems[1];
                String cargo = elems[2];
                String aniversario = elems[3];
                String logradouro = elems[4];
                String estado = elems[5];
                String cidade = elems[6];
                String cep = elems[7];
                String bairro = elems[8];
                
                String formato = "dd/MM/yyyy"; 
                Date data =  new SimpleDateFormat(formato).parse(aniversario);
                
               // 
               System.out.println(linha);
                
                if (nome.equals(nomeAntigo)) {
                   // cursos.add(new Curso(curso, centroLocal, site));
                  String linhareescrita = null;
                    linhareescrita = linha.replaceAll(linha,nomeAltera+ ";"+ novaEmpresa +  ";" + novoCargo + ";" + novoAniversario + ";"+ novoLogradouro + ";" + novoEstado + ";" + novaCidade + ";" + novoCep + ";" + novoBairro); 
                    System.out.print(linhareescrita);
                    linhas.add(linhareescrita);
                 //   fw.write(linhareescrita + "\n");
                    
                       
                }else
                //fw.write(linha + "\n");
                   linhas.add(linha);
                       
                       
              //  System.out.println(linha);
            }
            FileWriter fw  = new FileWriter("resources/contatos.txt");
           for (int i = 0; i < linhas.size(); i ++){
               System.out.println(linhas.get(i));
              if (i >0 ){ fw.append(System.getProperty("line.separator")); 
              }
                fw.write(linhas.get(i));
          
        //  System.out.println(linhas.get(i));
           
           }
            fw.close();
            
            
            
            
        } catch (IOException e) {
            throw new RuntimeException(e);
        } finally {
            if (leitor != null) {
                try {
                    leitor.close();
                    
                } catch (IOException e) { /* ignorado */ }
            }
        }

    }[/code]


abraço a todos...


[/quote][/quote]


Pronto velinho, é como eu digo, se nao pode vence-los mate eles ahaha ... 
nao vou usar mais o RandomAccessFile para fazer leitura ....
BufferedReader  é o cara...

[code]   BufferedReader leitor = null;
        ArrayList<String> linhas = new ArrayList<String>();
        try {
            //    File f = new File("resources/cursos2.txt");
            //     leitor = new BufferedReader(new FileReader(f));

            File f = new File("resources/contatos.txt");
            leitor = new BufferedReader(new FileReader(f));
            contatos = new ArrayList<Contato>();
            String linha = null;

            while ((linha = leitor.readLine()) != null) {

                String[] elems = linha.split(";");
//String Nome,String Empresa,String Cargo,String Aniversario,String Logradouro,
                //String Estado, String Cidade,String Cep,String Bairro

                String nome = elems[0];
                String empresa = elems[1];
                String cargo = elems[2];
                String aniversario = elems[3];
                String logradouro = elems[4];
                String estado = elems[5];
                String cidade = elems[6];
                String cep = elems[7];
                String bairro = elems[8];

                String formato = "dd/MM/yyyy";
                Date data = new SimpleDateFormat(formato).parse(aniversario);

Com isso eu nao me habilito em dizer da onde vinham os caracteres do alem …rsrs