Problema em ler um arquivo com InputStream

Pessoal, preciso ler um arquivo e ele não pode ser lido de uma vez só, quer dizer, eu nao posso abrir um stream e ler de uma vez so. Outras coisa : preciso usar o stream pra ler o arquivo!

alguem pode ajudar a entender o erro? como e que esse array estoura? onde isso acontece? pq???

java.lang.IndexOutOfBoundsException
at java.io.FileInputStream.readBytes(Native Method)
at java.io.FileInputStream.read(FileInputStream.java:199)
at inputoutputstream.AosPoucos.main(AosPoucos.java:36)


import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.PrintStream;

public class AosPoucos {

    public static void main(String[] args) {

        File file = new File("C:\testeStream.txt");
        
        // algumas variaveis
        int tam = 10;
        int retorno = 0;
        int inicio = 0;
        int fim = tam;
        int length = (int)file.length();

        // byte[] que guarda tudo
         byte bytes[] = new byte[(int)file.length()];

        try {
            // apontei para o arquivo
            InputStream is = new FileInputStream(file);

            // enquanto nao chegar ao fim...
            while (  (retorno = is.read(bytes, inicio, fim)) > 0 ) {
                System.out.println("de " + inicio + " ate " +  fim);
                
                // aqui o inicio é aumentado pra onde parou da ultima vez...
                // o fim é aumentado para mais "10" depois so inicio
                inicio += retorno;
                fim = inicio + tam;
               
            }
            
            // mostra como ficou a ultima iteracao
            System.out.println("de " + inicio + " ate " +  fim);
            System.out.println(new String(bytes) + " " + fim);

        } catch (Exception e) {
            e.printStackTrace();

            System.err.println("pro de " + inicio + " ate " +  fim);
        }

    }

}

Cara da uma olhada neste codigo talvez o ajude…

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

public class LerArquivoTxt {

    public static void main(String[] args) {

        File file = new File("C:/testeStream.txt");
        
        try {
            // apontei para o arquivo
            InputStream is = new FileInputStream(file);
            
            System.out.println(convertStreamToString(is));

        } catch (Exception e) {
            e.printStackTrace();
        }

    }
    
    public static String convertStreamToString(InputStream is) throws IOException {

        if (is != null) {
            StringBuilder sb = new StringBuilder();
            String line;

            try {
                BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
                while ((line = reader.readLine()) != null) {
                    sb.append(line).append("\n");
                }
            } finally {
                is.close();
            }
            return sb.toString();
        } else {        
            return "";
        }
    }

}

Valeu
Wolmir Garbin

             while (  (retorno = is.read(bytes, inicio, fim)) > 0 ) {  
                 System.out.println("de " + inicio + " ate " +  fim);  
                   
                 // aqui o inicio é aumentado pra onde parou da ultima vez...  
                 // o fim é aumentado para mais "10" depois so inicio  
                 inicio += retorno;  
                 fim = inicio + tam;  
                  
             }

Só de olhar, já vi que vai dar problema na segunda iteração deste while - por quê?

entanglement, você poderia ter dito qual era o erro não é, cara?

wolmirGarbin, cara… eu não tinha lido teu código, eu já tinha descoberto com fazer antes (só depois vi que você tinha postado o código).

Eu tava tentando baixar assim (com Stream) um pdf da internet e salvar localmente, na máquina. tá resolvido, pessoal! Valeu mesmo aí pela força!

… O erro que se referiu deve ter sido em como eu tava tentado fazer os limites do que foi lido e do que ainda tinha que ser lido (inicio e fim).

[resolved]Resolvido![/resolved]

Aproveitando (pra fazer uma coisa que nao tem nada a ver…)

wolmirGarbin, essa aí que você tá segurando é uma strato?

Comprei a pouco tempo uma Washburn Wr 154, muito boa.