Uso de PrintWriter para gravar arquivo

2 respostas
jjsalcantara

Senhores estou com um dilema de iniciante em java: Preciso ler um arquivo e gravar outro a partir dele com algumas modificações. Estou conseguindo ler e até gravar o segundo, só que com um pequeno problema: O segundo não grava todas as linhas. Ex: o original tem 149563 linhas mas o segundo só tem gravadas 149521 linhas. Há um limite de linhas para PrintWriter ou está ocorrendo alguma exeçao que não estou pegando ?

segue cópia do código que estou usando:

import <a href="http://java.io">java.io</a>.<em>;

import java.awt.</em>;

import java.awt.event.<em>;

import javax.swing.</em>;

public class ArquivoEntSai

{

private static JFFile jFFile;

public static void main (String[] args)

{

// Open Input File

jFFile = new JFFile();

String  inputFile[] = jFFile.open();

System.out.println(inputFile[1]);

if (inputFile[0].equals(" "))

{

System.out.println(Nenhum arquivo aberto!!!);

System.exit(0);

}

// Output text file (for errors and messages)

PrintWriter pw = null;

String      fw = Gerado.+inputFile[2].trim();

try

{

pw = new PrintWriter(new FileWriter(fw));

}

catch (IOException e)

{

System.err.println("Caught IOException: " +

e.getMessage());

}

System.out.println("Arquivo Gerado: " + fw);
/** comentada para nao interferir  nos dados dos arquivos  
    pw.println("Coloque cabeçalho aqui, se tiver"); 
    pw.println("================================"); 
    
  */  
    try 
    {
        // open text file
        BufferedReader in = new BufferedReader(new FileReader(inputFile[0]));
        // read and process a line
        String line = in.readLine();
        System.out.println("Início processo do arquivo " + inputFile[0]);
        int qtdeLi = 0;
        while(line != null) 
        {
            //Processa linha 
            qtdeLi += 1;
            //Process line 
       /**
            String codigo = (line.substring(  0,  8));
            String nome   = (line.substring(  9, 29));
            String data1  = (line.substring( 31, 39));
            String data2  = (line.substring( 40, 49));
       */
          
            String parte1 = (line.substring( 0,  37 ));
            String parte2 = (line.substring( 38, 40 ));
            String parte3 = (line.substring( 40, 126));
                        
            // Monta Saida
            String output =""; 
            output =  parte1;
            output += parte2;
            output += parte3;
                
      /**
            output  = codigo;
            output += " | ";
            output += nome;
            output += " | ";
            output += data1;
            output += " | ";
            output += data2;
      */
            // Grava Saida
            pw.println(output);
    //        System.out.println("linha " + output );
            // Prepara para processar proxima linha
            line = in.readLine();
        }
        in.close();
   /**
        pw.println("=================================="); 
        pw.println("Coloque rodapé aqui, se necessário");
        pw.close();
   */
        System.out.println("Fim do processo do arquivo " + inputFile[0]);
        System.exit(0);
    }
    catch( Exception e) 
    {
        e.printStackTrace();
    } 
}
}

class JFFile extends JFrame implements ActionListener

{

//=======================================================================\

// Open File Function using FileDialog

// Return a String vector with:

//    [0] = complete file name (file name and his directory(path))

//    [1] = directory path only

//    [2] = file name only

public String[] open()

{

FileDialog fAbrir;

fAbrir = new FileDialog(this,Abrir arquivo,FileDialog.LOAD);

fAbrir.setVisible(true);

if (fAbrir.getFile()==null)

{

String oFile[] = {" “,” “,” "};

return (oFile);

}

String file  = (fAbrir.getDirectory()+fAbrir.getFile());

String dir   = (fAbrir.getDirectory());

String name  = (fAbrir.getFile());

String oFile[] = {file, dir, name};

return(oFile);

}

//=======================================================================\

public void actionPerformed(ActionEvent e)

{

}

//=======================================================================\

}

Desde já agradeço a atenção dispensada.
:shock:

2 Respostas

ViniGodoy

Primeiramente, você pode fazer um favor? Sempre que postar códigos use a tag code. Fica muito difícil ler o seu código sem formatação. Se você não sabe fazer isso, visite esse link:
http://www.guj.com.br/posts/list/50115.java

Tente chamar o método pw.flush() antes de chamar pw.close().
Isso porque o FileWriter tem buffers, que não são descarregados sem uma chamada ao comando.

LPJava

ViniGodoy:
Primeiramente, você pode fazer um favor? Sempre que postar códigos use a tag code. Fica muito difícil ler o seu código sem formatação. Se você não sabe fazer isso, visite esse link:
http://www.guj.com.br/posts/list/50115.java

Tente chamar o método pw.flush() antes de chamar pw.close().
Isso porque o FileWriter tem buffers, que não são descarregados sem uma chamada ao comando.

Rpz… é complicado!

Criado 20 de março de 2008
Ultima resposta 20 de mar. de 2008
Respostas 2
Participantes 3