[Resolvido] Ler e Escrever em .txt

Primeiramente, vou explicar o que quero fazer. (Sou iniciante MESMO, portanto não esperem muito)

Tenho uma arquivo de texto que não tem delimitador, e quero ler esse texto, separar por colunas para inserir no banco de dados.
Como o SQL Server 2005 disponibiliza apenas o ‘BULK INSERT’, tenho que separar essas colunas com delimitadores (no meu caso “;” ).

Já consegui ler e mostrar na tela o arquivo que tenho, já transformado.
Porém quando vou criar o novo .txt ele copia apenas a primeira linha e dá o erro ‘Stream Closed’

Obs. 1: Trecho do arquivo ORIGEM
0000008263211220100650012117130501
0000008273211220100701012311054637
0000008283211220100810012975014424
0000008293211220100829018111039528
0000008303211220101017013707353426

Obs. 2: Como o novo txt vai ficar
000000826;3;21122010;0650;0;12117130501;
000000827;3;21122010;0701;0;12311054637;
000000828;3;21122010;0810;0;12975014424;
000000829;3;21122010;0829;0;18111039528;
000000830;3;21122010;1017;0;13707353426;

Obs. 3: A IDE utilizada está sendo o BlueJ

Segue o código:

import java.io.*; 
import javax.swing.*;

public class Gravar {
public void Gravar(String batidas_novas){  
       String conteudo = batidas_novas;  
       
int i=0;
       try{
           
          // o true significa q o arquivo será constante  
          FileWriter x = new FileWriter("D:\batidas_novas.txt",true);   
          FileReader fr = new FileReader("C:\batidas.txt"); // Local do Arquivo
          BufferedReader br = new BufferedReader(fr); // Alterando da variável fr para br

          for ( i=0;i<9999;i++) {
          String s = br.readLine(); // variavel para receber o relatorio do ponto
             while ((s = br.readLine()) != null) {
                                          
            if (s.charAt(9) == '3') { // faz a comparação, se o indice 9 for igual a 3 ele faz isso ai em baixo
                                                  
            System.out.println(s.substring(0,9)+ ";"+s.substring(9,10)+";"+s.substring(10, 18) + ";" + s.substring(18,19)+s.substring(19, 22) + ";"+s.substring(22,23)+";"+s.substring(23)+";");
             
             conteudo += "\n"; // criando nova linha e recuo no arquivo           
             x.write(s.substring(0,9)+ ";"+s.substring(9,10)+";"+s.substring(10, 18) + ";" + s.substring(18,19)+s.substring(19, 22) + ";"+s.substring(22,23)+";"+s.substring(23)+";"); // armazena o texto no objeto x, que aponta para o arquivo           
              x.close(); // cria o arquivo           
              JOptionPane.showMessageDialog(null,"Arquivo gravado com sucesso","Concluído",JOptionPane.INFORMATION_MESSAGE);
              br.close();
                 
       }
        
    }
}
            
       }  
       // em caso de erro apreenta mensagem abaixo  
       catch(Exception e){  
          JOptionPane.showMessageDialog(null,e.getMessage(),"Atenção",JOptionPane.WARNING_MESSAGE);  
       }  
    }  
}

Obrigado desde já pela ajuda.

Porque você precisa disso?

for ( i=0;i<9999;i++) 

Aqui você ta perdendo a primeira linha do arquivo

 String s = br.readLine();

O certo é você ja começar no while

String s = ""; 
             while ((s = br.readLine()) != null) 

Pelo o que eu percebi o erro é porque você esta fechando o stream dentro do while

 x.close(); // cria o arquivo             

Jose111, juntamos umas dicas suas, alteramos mais algumas coisinhas e ficou do jeito que queriamos.

Muito obrigado pelas dicas !

Segue o código para futuras dúvidas de outros usuários:

import java.io.*; 
import javax.swing.*;

public class Ponto {
public void Gravar(String batidas_novas){  
       String conteudo = batidas_novas;  
       
int i=0;
       try{
           
          FileWriter x = new FileWriter("D:\batidas_novas.txt",true);   
          FileReader fr = new FileReader("C:\batidas.txt"); // Local do Arquivo
          BufferedReader br = new BufferedReader(fr); // Alterando da variável fr para br

          String s = "";
             while ( ( s = br.readLine() ) != null) {
                                         
            if (s.charAt(9) == '3') { // faz a comparação, se o indice 9 for igual a 3 ele faz isso ai em baixo
                                                    
              conteudo += "\r\n"; // criando nova linha e recuo no arquivo           
        x.write(s.substring(0,9)+ ";"+s.substring(9,10)+";"+s.substring(10, 18) + ";" + s.substring(18,19)+s.substring(19, 22) + ";"+s.substring(22,23)+";"+s.substring(23)+"|"); // armazena o texto no objeto x, que aponta para o arquivo                           
        
     
        
        }
        
        //      JOptionPane.showMessageDialog(null,"Arquivo gravado com sucesso","Concluído",JOptionPane.INFORMATION_MESSAGE);  //Tiramos para evitar os vários 'Enters' a serem apertados
              
        
    
}
            x.close(); // cria o arquivo
               
        }  
       // em caso de erro apreenta mensagem abaixo  
       catch(Exception e){  
          JOptionPane.showMessageDialog(null,e.getMessage(),"Atenção",JOptionPane.WARNING_MESSAGE);  
       }  
    }  
}