Uso de PrintWriter para gravar arquivo

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 java.io.;
import java.awt.
;
import java.awt.event.;
import javax.swing.
;
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:

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.

[quote=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.[/quote]

Rpz… é complicado!