Problemas com a classe BufferedReader

Galera, tirem me uma duvida, o metodo “readLine” da classe “bufferedreader” automaticamente elimina espaços vazios ao ler uma linha? digo isso pois:
erro%20readLine()

Executado a leitura da linha tenho o retorno:

697000098111 AUTO POSTO AIMORES LT GIA 448006

Porém o retorno deveria ser, segundo o arquivo:

697000098111 AUTO POSTO AIMORES LT GIA 448006

Alguém tem idéia do que pode ter ocorrido ?

Editado pois até o GUJ ta eliminando.

Não elimina.
Porém, pode ser que o modo como a tabulação foi realizada não esteja de acordo com o padrão para o java (\t)

darlan, pode me explicar melhor o que quer dizer com tabulação ?

Em geral, quando você cria um documento de texto em que determinados valores precisam ser posicionados de forma adequada, você separa os “elementos” usando a tecla tab e não a space.
Se quer um exemplo, no java, você pode fazer algo como:

System.out.println("Com espaços");
System.out.println("Nome    Idade    Email");
System.out.println("João      20         joao.joao@email.com");

E

System.out.println("Com tab");
System.out.println("Nome\t\t\tIdade\t\t\tEmail");
System.out.println("João\t\t\t20\t\t\tjoao.joao@email.com");

Cujo resultado é:

image

Não elimina não.

Por acaso você não está fazendo nenhum replace do conteúdo da linha lida?
Posta o código completo da leitura do arquivo, pois o trecho que você postou sempre vai lançar uma exceção.

Você está salvando o valor lido em um arquivo e conferindo o conteúdo em algum editor the texto?
Se for o caso, pode ser que seu editor está renderizando o ‘\t’ como vários espaços em branco.

 java.io.File file = new java.io.File( path );
         nomeArquivo = file.getName();
         
         //Contando quantas linhas há no arquivo.
         //----------------------------------------------------------------------
 
         logSistema = "contagem de linhas.";
         java.io.FileInputStream fileInputStream = new java.io.FileInputStream(file);
         java.io.BufferedReader bufferedReader = new java.io.BufferedReader( new java.io.InputStreamReader(fileInputStream) );
 
         //Lendo arquivo para importação
 
         logSistema = "leitura do arquivo de importação.";
 		
         while( (linha = bufferedReader.readLine() ) != null ){
             
             if( ! gb.isEmpty(linha) ){

O arquivo em si vem zipado, antes de realizar a leitura eu descompacto ele, salvo em uma pasta, pego o arquivo .txt para fazer a leitura, esse arquivo descompacto fica exatamente igual ao que eu descompactei por conta propria, achei que era o problema de tabulação mesmo, porém vi que o espaçamento são espaços simples mesmo e não “tab”.

PS: Não postei o restante do codigo pois é muito extenso e esse trecho é o que se usa como base para as demais partes do codigo, devido depender da variavel “linha”.

Não posta imagens, posta o código e formata com o botão </> é muito ruim ler código em imagens.

Em algum momento você está alterando o conteúdo das linhas.

Pode ser quando você descompacta ou em algum momento na sua leitura.
Sem ver o código completo não dá pra descobrir.

Como é seu código que descompacta o arquivo?

Não altero, somente descompacto.
Vlw pela dica, estou me adaptando a plataforma ainda.

Mas pra descompactar, você lê um InputStream do arquivo ZIP e grava num OutputStream do arquivo descompactado.
Como estás fazendo isso?

// Verifica se não existe a pasta temp e cria
        java.io.File diretorio = new java.io.File( caminhhoPadrao );
        if ( ! diretorio.exists() ){
            diretorio.mkdir();
        }

        // Salva o arquivo .zip        
        java.io.File arquivoZip = new java.io.File( caminhhoPadrao , nomeArquivo);        
        fItem.write( arquivoZip );

        java.io.File arquivo = null;

        // descompactar arquivo .zip
        try {

            java.util.zip.ZipFile zip = new java.util.zip.ZipFile( arquivoZip );
            java.util.Enumeration entries = zip.entries(); 

            while ( entries.hasMoreElements() ) { 

                java.util.zip.ZipEntry entry = (java.util.zip.ZipEntry) entries.nextElement();
                arquivo = new java.io.File(diretorio, entry.getName());
                
                nomeArquivo = entry.getName();
                destino.put("Texto", nomeArquivo);
                gb.getExecScript("CorrigirCharset");
                nomeArquivo = destino.getString("TextoCharSet");
                origem.put("NomeArquivo", nomeArquivo);

                java.io.InputStream input = zip.getInputStream( entry ); 
                java.io.OutputStream output = new java.io.FileOutputStream( arquivo );

                byte[] buffer = new byte[1024]; 
                int len = 0; 

                while ( (len = input.read(buffer) ) >= 0 ){ 

                    output.write(buffer, 0, len); 

                }

                input.close();
                output.close();                
            }

            zip.close();            
        }
        catch (java.io.IOException ioe) {

            origem.put("msgErro", "Não foi possível descompactar o arquivo. Detalhes: " + ioe.getMessage() );

        }

Dessa forma.

Legal, o problema não parece estar na descompactação.

Após descompactar, é feito alguma outra tratativa no arquivo descompactado?
Pergundo porque você tem uma chamada pra um tal de gb.getExecScript("CorrigirCharset");
Tem algum outro código que manipula seus arquivos antes de você ler as linhas?

Se não tiver, então minha sugestão é que realmente poste o código que faz a leitura dele.

Então, não passa por nenhuma tratativa antes da leitura, aquele gb.getExecScript é referente ao nome do arquivo, não tem contato com o arquivo em si.

Como eu havia postado logo acima, o código referente a leitura é esse:

try{

        java.io.File file = new java.io.File( path );
        nomeArquivo = file.getName();
        
        //Contando quantas linhas há no arquivo.
        //----------------------------------------------------------------------

        logSistema = "contagem de linhas.";
        java.io.FileInputStream fileInputStream = new java.io.FileInputStream(file);
        java.io.BufferedReader bufferedReader = new java.io.BufferedReader( new java.io.InputStreamReader(fileInputStream) );

        //Lendo arquivo para importação

        logSistema = "leitura do arquivo de importação.";
		
        while( (linha = bufferedReader.readLine() ) != null ){
            
            if( ! gb.isEmpty(linha) ){
                
                logSistema = "importação do VA.";
                
                auxIe = linha.substring(0,12);                                
                inscricaoEstadual = auxIe.substring(0, 3) + "." + 
                                    auxIe.substring(3, 6) + "." + 
                                    auxIe.substring(6, 9) + "." + 
                                    auxIe.substring(9, 12);

O restante do código é somente obtendo os valores respectivos da variavel “Linha”.
O problema é que no arquivo as posições das informações estão de um jeito e na hora de fazer a leitura do mesmo, esta de outro, que é aquela questão dos espaçamentos. Impossibilitando que eu estipule um padrão de recorte das informações.

Está usando java 8 ou superior?
Se sim, existe a classe Files. Ela permite ler o arquivo todo, de uma vez, e gerar um array de String que representam as linhas:

List<String> linhas = Files.lines(File.getPath());

Sim java 8, vou tentar utilizar essa classe e te dou um retorno.

Cara meu exitamento em postar o reste do código, foi minha perdição.

O codigo estava complemente correto no que diz respeito a leitura, porém em dado momento ao tentar recortar um trecho da string utilizando substring, ele estourava o tamanho. Acontece que o parametro “endIndex” estava incorreto, dai na pressa em resolver nem me atentei que poderia ser isso pois ao exibir a linha estava diferente da do arquivo. Peço desculpas, e agradeço o empenho.

1 curtida