Erro no while

Galera ei to lendo um arquivo e ele deveria retornar varios arquivos dentro do arraylist, mas ele so pega o primeiro arquivo, porque sera?

[code]import java.io.BufferedReader;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;

/*

  • Created on 28/06/2006
  • TODO To change the template for this generated file go to
  • Window - Preferences - Java - Code Style - Code Templates
    */

/**

  • @author Felipe Alves Lutz Pinheiro

  • TODO To change the template for this generated type comment go to

  • Window - Preferences - Java - Code Style - Code Templates
    */
    public class Leitura_Dados {

    private ArrayList lista= new ArrayList() ;

    public Leitura_Dados() {

     }
    

    public void learquivo() throws IOException{
    // FileReader reader = new FileReader(“C:\240.txt”);//empresa
    //BufferedReader leitor = new BufferedReader(reader);

     FileReader reader = new FileReader("C:\251_1_999.txt");//empresa
     BufferedReader leitor = new BufferedReader(reader);
     
     
     
     
     String cnpj=null;
     String linha1=null;
     String cnpj2=null;
     String linha2=null;
     
     ArrayList pagina = new ArrayList();
    

    // while pra achar o cgc
    //while((linha1 = leitor.readLine())!=null) {
    // if(linha1.contains(“CGC”))
    // cnpj=linha1.substring(109,132);
    // else
    // cnpj2=linha1;

     //}
     //System.out.println("cgc: -->"+cnpj);
     
     //leitor.close();
     
     boolean status=false;
     // while pra pegar a pagina
     while((linha2 = leitor.readLine())!=null) {
     	if(linha2.contains("C A I X A  E C O N O M I C A") && status==false){
     		pagina.add(linha2);
     			while((linha2 = leitor.readLine())!=null){
     				pagina.add(linha2);
     				if(linha2.contains("DESTINO:")){
     					pagina.add(linha2);
     					status=true;
     					break;
     					
     				}
     				
     			}
     		
     	}
     					
     }
     System.out.println("Tamanho do array list -- > "+pagina.size());
     for(int i =0;i<pagina.size();i++){
     	System.out.println(pagina.get(i));
     }
    

    }

    public static void main(String args[]) throws IOException{
    Leitura_Dados n = new Leitura_Dados();
    n.learquivo();

    }

}
[/code]

Falow!!!>

Opa! Você tá querendo ler todas as linhas do arquivo no while? Não entendi direito, mas se for isso, faz assim:

while(leitor.ready()) {
   String linha = leitor.readLine();
   if(blablabla) 
      pagina.add(linha);
   else {
      blablabla;
   }
}

Falou!

Tipo assim eu tenho um arquivo com tres relatorios no mesmo padrao, e eu queria pegar cada um dos tres, inteiramente, e separar cada um em um arquivo, acho que assim ficou mais explicado!!

falow!!

Hum…
Você pode "contar"quantos bytes tem cada relatório dentro do arquivo, e pegar intervalos dentro do arquivo separadno cada relatório… Tipo usando FileStream, lendo o arquivo com se fose binário ao invés de texto… Com isso você não vai precisar ficar lendo o arquivo e procurando por padrões, palavras chave, nem nada… Fica muito mais rápido.
Sabendo quantos bytes tem cada registro, você começa do inicio do arquivo e lê n bytes (tamanho de um relatório). A partir deste ponto lê mais n bytes (segundo relatório) e assim por diante :slight_smile:

Como eu faço pra contar os bytes?
qual classe eu uso pra isso?
Valeu!!!

		while((linha2 = leitor.readLine())!=null) {
 			if(linha2.contains("C A I X A  E C O N O M I C A") && status==false){
 				pagina.add(linha2);
 					while((linha2 = leitor.readLine())!=null){
 						pagina.add(linha2);
 						if(linha2.contains("DESTINO:")){
 							pagina.add(linha2);
 							status=true;
 							break;
 							
 						}
 						
 					}
 				
 			}
 							
 		}

Você já olhou nesse arquivo se a tal string “C A I X A E C O N O M I C A” aparece direitinho, para cada relatório? Veja o arquivo de entrada com mais atenção.

Cara, pra contar os bytes é simples… ehehehe
Abre o arquivo em algum editor que mostre quantos caracteres estão sendo selecionados no momento. Selecione um relatório inteiro e veja quantos caracteres o editor diz que estão selecionado. Este é o número de bytes do seu relatório, isto é, 1 char = 1 byte :slight_smile:
Não sei se voê tem caracteres entre um relatório ou outro dentro do arquivo ou se eles estão grudados… Tome cuidado com isso. Quebra de linha, tabulação, espaço em branco, tudo isso é considerado caractere.

Para passear pelo arquivo você pode usar a classe RandomAcessFile. Dê uma pesquisada na net ou livros que você acha bastante coisa com exemplos :slight_smile:

Falou!