Błędne wczytywanie liczb z pliku tekstowego

1

Witam,
Mam problem z odczytaniem pliku z zewnętrznego serwera http.

Mój kod:

import java.io.BufferedInputStream; 
import java.io.BufferedOutputStream; 
import java.io.File; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.net.URL; 
import java.net.URLConnection; 
import java.nio.charset.MalformedInputException;

public class NowaKlasa
{
    public static void main(String[] args) {
        URL url = null; 
        URLConnection con = null; 
        int i;
        try { 
            url = new URL("http://localhost:1337/test/liczby.txt"); 
            con = url.openConnection(); 
            BufferedInputStream bis = new BufferedInputStream(con.getInputStream()); 
            System.out.println(bis.read());
            bis.close();
        } 
        catch (MalformedInputException malformedInputException) { 
            malformedInputException.printStackTrace(); 
        } 
        catch (IOException ioException) { 
            ioException.printStackTrace(); 
        } 
    }
}

Problem w tym że program zwraca liczbę 49 zamiast pierwszego wiersza zapisanego w pliku.
W pliku zapisane są w jednej linii liczby oddzielone spacją, Które potrzebuje wczytać do programu.

2

Metoda read czyta jeden bajt. Spróbuj tak:

int rozmiar = conn.getContentLength();
byte[] bajty = new byte[rozmiar];
int przeczytane = 0;
while(przeczytane<rozmiar)
{
    przeczytane+=bis.read(bajty,przeczytane,rozmiar-przeczytane);
}
0

Dzięki za podpowiedź. Poradziłem sobie w podobny sposób.

Wkleję kod aby wątek nie był bezużyteczny :)

import java.io.*; 
import java.net.*; 
import java.nio.*;

public class NowaKlasa
{
    public static void main(String[] args) {
        int i;
        int a=0;
        String dane = "";
        int suma=0;
        int ilosc=0;
        float srednia=0;
        try { 
            URL url = new URL("http://localhost:1337/test/liczby.txt"); 
            InputStream in = url.openStream();
            BufferedInputStream wejscie = new BufferedInputStream(in);
            while(true)
            {
                int znak = wejscie.read();
                if (znak != -1){
                    dane += (char) znak;
                }
                else {
                    break;
                }
            }
        }
        catch (MalformedURLException mue)
        {
            System.err.println ("Zły URL");
        }
        catch (IOException ioe)
        {
            System.err.println ("I/O Error - " + ioe);
        }
      
        String liczby[]=dane.split(" ");
       
        System.out.println(dane + "\n");
        
        for(;a<liczby.length;a++) {
            suma += Integer.parseInt(liczby[a]);
        }
        
        ilosc = liczby.length;
        srednia = suma/ilosc;
        System.out.println("Srednia: " + srednia);
    }
}

Program pobiera dane z pliku znajdującego się na zewnętrznym serwerze. W tym przypadku jest to mój lokalny serwer na porcie 1337. Wyciąga z pliku liczby następnie wypisuje wszystkie i oblicza ich średnią.

1 użytkowników online, w tym zalogowanych: 0, gości: 1