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();
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!!
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
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
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