: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
packageCurso_Java;importjava.io.*;publicclassLerPosicao{publicStringfile;publicLerPosicao(Stringfile){this.file=file;}publicvoidgetSubStrings(inta,intb,intc,intd)throwsIOException{Stringline;try{BufferedReaderbf=newBufferedReader(newFileReader(this.file));while((line=bf.readLine())!=null)if(line.length()>=d)System.out.println(""+line.substring(a,b)+";"+line.substring(c,d));}catch(IOExceptione){// possiveis erros são tratatos aqui}}publicstaticvoidmain(String[]args){LerPosicaoL=newLerPosicao("file.txt");try{L.getSubStrings(0,26,858,859);}catch(IOExceptionioe){ioe.printStackTrace();}}
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:
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?
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(IOExceptione){
System.out.println("Erro na leitura do arquivo !!");e.printStackTrace();}
catch(Exceptione){
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 ?
importjava.io.BufferedReader;importjava.io.FileReader;importjava.io.IOException;publicclassLerPosicao{publicStringfile;publicLerPosicao(Stringfile){this.file=file;}publicvoidgetSubStrings(inta,intb,intc,intd)throwsIOException{Stringline;intnumLinhasLidos=0;try{BufferedReaderbf=newBufferedReader(newFileReader(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(IOExceptione){System.out.println("Erro na leitura do arquivo!!");System.out.println("erro ao ler linha do arquivo de input <"+numLinhasLidos+">");e.printStackTrace();}catch(Exceptione){System.out.println("Erro!");System.out.println("erro ao ler linha do arquivo de input <"+numLinhasLidos+">");e.printStackTrace();}// possiveis erros são tratatos aqui }publicstaticvoidmain(String[]args){LerPosicaolerPosicao=newLerPosicao("file.txt");try{lerPosicao.getSubStrings(0,26,858,859);}catch(IOExceptionioe){ioe.printStackTrace();}}}