Ler arquivo txt e mostrar posições de x a y

8 respostas
G

:idea:
Pessoal, criei o seguinte código, onde efetua a leitura de um arquivo txt.
Neste arquivo txt existem mais de 10.000 caracteres.
Eu consegui contar os caracteres que desejava exibir porém, ele começa a me exibir os dados a partir do meio do arquivo, ou seja, se eu tenho 10.000 caracteres neste arquivo, ele me mostra do 5.000 em diante....

Alguém por gentileza poderia me ajudar?
Abrcs

package Curso_Java;
import java.io.*;   

public class LerPosicao {   
  
  public String file;   
  
  public LerPosicao(String file){   
     this.file = file;   
  }   
  
  
  public void getSubStrings(int a, int b, int c, int d) throws IOException{   
   String line; 
   
   try {
   BufferedReader  bf = new BufferedReader(new FileReader(this.file));   
  
     while ((line = bf.readLine()) != null)   
         if (line.length() >= d) System.out.println(""
         + line.substring(a,b)   
         + ";"  
         + line.substring(c,d));   
  
  }     
	  catch (IOException e){
	      // possiveis erros são tratatos aqui
	  }
  }

  public static void main(String[] args) {   
           
   	  LerPosicao L = new LerPosicao("file.txt");
  
      try{
    	 
         L.getSubStrings(0,26,858,859);
      }catch (IOException ioe) {   
         ioe.printStackTrace();   
      }   
  }

Guilherme Freire
www.guilhermefreire.com.br

8 Respostas

Jair_Rillo_Junior

Será que as primeiras linhas não estão fora da condição do if?

if (line.length() >= d) System.out.println(""  
          + line.substring(a,b)     
          + ";"    
          + line.substring(c,d));

Pq realmente senão entrar nesse IF, nada será impresso.

G

Está concatenado… e exibindo os dados, porém todos os dados que contem no txt não!

Ex:

4807300000000000020474610101200110148520030131
4807300000000000020474610101200110148520030131
4807300000000000020474610101200110148520030131
*Começa a ler a partir daqui, ao invés do primeiro item*
[b]4807300000000000020474610101200110148520030131[/b]
4807300000000000020474610101200110148520030131
4807300000000000020474610101200110148520030131
4807300000000000020474610101200110148520030131

Abrcs
Guilherme Freire
www.guilhermefreire.com.br

Jair_Rillo_Junior

A questão nao é concatenar, a questão que tem um IF lá if (line.length() >= d)

O que você quer testar com esse IF? A impressão é que isso que está errado

G

Desculpe, eu tirei o if pois estava errado, mas parece que ele não lê os dados desde o início e sim a partir do meio…

Eu achei muito estranho, tem alguma idéia do que pode ser?

Abrcs
Guilherme Freire
www.guilherme freire.com.br

shoko

Lembre que o método readLine() do BufferedReader lê uma linha e não o arquivo inteiro.
Se todos os seus caracteres estiverem em uma linha então beleza.

ivo_costa

O método substring lança IndexOutOfBoundsException, tlvz vc esteja acessando um valor maior que o da linha. Tenta colocar e.printStackTrace() no catch:

while ((line = bf.readLine()) != null)   
         if (line.length() >= d) System.out.println(""
         + line.substring(a,b)   
         + ";"  
         + line.substring(c,d));   
  
  }     
	  catch (IOException e){
	      // possiveis erros são tratatos aqui
              e.printStackTrace();
	  }
  }
G

Então…
Meu arquivo txt está em várias linhas e não em uma linha apenas, o que devo fazer para que leia o arquivo inteiro e exibir todos os dados a partir do primeiro registro?

Ele está desta maneira:

48073000000000004200580401
48073000000000004200586501
48073000000000004200586601
48073000000000004200590701
48073000000000004200591501
48073000000000004200596301
48073000000000004200596401
48073000000000004200601201
48073000000000004200602101
48073000000000004200605501
48073000000000004200615801
48073000000000004200615901
48073000000000004200621801
48073000000000004200621901
48073000000000004200622501
48073000000000004200647501
48073000000000005200004701
48073000000000005200008001
48073000000000005200011601
48073000000000005200012201
48073000000000005200012301
48073000000000005200025601
48073000000000005200025701
48073000000000005200039401
48073000000000005200039701
48073000000000005200040001
48073000000000005200040103
48073000000000005200045801
48073000000000005200046001
48073000000000005200049901
48073000000000005200059902
48073000000000005200062701
48073000000000005200062901
48073000000000005200063001
48073000000000005200068401
48073000000000005200071001
48073000000000005200071101
48073000000000005200088201
48073000000000005200094901
48073000000000005200095201
48073000000000005200124301
48073000000000005200124401
48073000000000005200130101
48073000000000005200144001
48073000000000005200148801
48073000000000005300004601
48073000000000005300007601
48073000000000005300023101
48073000000000005300034501
48073000000000005300042701
48073000000000005500000801
48073000000000005500002801
48073000000000005500020601
48073000000000005500020701
48073000000000005500025501
48073000000000005500028101
48073000000000005500032901
48073000000000005500033101
48073000000000005500034401
48073000000000005500035201
48073000000000005500039601
48073000000000006200003501
48073000000000006200011301
48073000000000006300001801
48073000000000022200021001
48073000000000024200064501

Abrcs
Att,
Guilherme Freire
www.guilhermefreire.com.br

A

gfs2000 seu problema está na lógica do programa.
Ele está lançando uma StringIndexOutOfBoundsException mas você não está percebendo isso pois dentro do block catch não há mensagens sendo enviadas.
Primeira coisa, coloca uma mensagem de erro pra visualizar o problema como “ivo costa” disse.

catch (IOException e){
			System.out.println("Erro na leitura do arquivo !!");
			e.printStackTrace();
		}
		
		catch (Exception e) {
			System.out.println("Erro !");
			e.printStackTrace();
		}

Há o problema que o “shoko” disse em relação à formatação do arquivo file.txt . “readLine” lê UMA linha e seu arquivo está formatado em várias linhas. Ao executar o o comando line.substring(858,859), essas posições não existem e será lançada uma Runtime exception que eu disse acima.

Alterei o seu código. Da uma olhada e ve se ajuda sobre o que você quer fazer, blz ?

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class LerPosicao {     

	public String file;     

	public LerPosicao(String file){     
		this.file = file;     
	}     

	public void getSubStrings(int a, int b, int c, int d) throws IOException{     
		String line;   
		int numLinhasLidos = 0;
		try {   
			BufferedReader  bf = new BufferedReader(new FileReader(this.file));     

			while ((line = bf.readLine()) != null) {
				numLinhasLidos ++;
					System.out.println("" + line.substring(a,b)); 
					System.out.print(";" + line.substring(c,d) + "\n");
				
			}
				     
			System.out.println("O numero de linhas lidas do arquivo <" +file+ "> eh <" + numLinhasLidos + ">");
		}
		
		catch (IOException e){
			
			System.out.println("Erro na leitura do arquivo!!");
			System.out.println("erro ao ler linha do arquivo de input <" +numLinhasLidos+ ">");
			e.printStackTrace();
		}
		
		catch (Exception e) {
			System.out.println("Erro!");
			System.out.println("erro ao ler linha do arquivo de input <" +numLinhasLidos+ ">");
			e.printStackTrace();
		}
		// possiveis erros são tratatos aqui   
	}   


	public static void main(String[] args) {     

		LerPosicao lerPosicao = new LerPosicao("file.txt");

		try {   
			lerPosicao.getSubStrings(0,26,858,859);   
		}
		catch (IOException ioe) {     
			ioe.printStackTrace();     
		}     
	} 
}

Vlw !
[]'s !

Criado 30 de julho de 2008
Ultima resposta 31 de jul. de 2008
Respostas 8
Participantes 5