Jak ściągnąć plik z internetu?

0

Witam.
Próbuję pobrać plik z internetu. Niestety, za każdym razem po ściągnięciu pliku niemogę go otworzyć. Porównując ściągniety plik przeze mnie oraz bezpośrednio przez www pliki waża tyle samo. Po otworzeniu obydwu plików w edytorze textowym można zauważyć, że niektóre znaki się różnią. Wie ktoś w czym leży problem? Wg. mnie jest to złe kodowanie, ale nie wiem na jakie powinienem ustawic.
Poniżej zamieszczam kod:

// Send data
                URL u = new URL(link);
                URLConnection conn = u.openConnection();
                conn.setDoOutput(true);
                OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
                wr.write(myPost);
                wr.flush();

                // Get the response
                FileWriter write = new FileWriter("C:\\" + data[1]);
                PrintWriter text = new PrintWriter(write);

                // Get an input stream for reading
                InputStream in = conn.getInputStream();

                // Create a buffered input stream for efficency
                BufferedInputStream bufIn = new BufferedInputStream(in);

                // Repeat until end of file
                while (true)
                {
                    int d = bufIn.read();
                    text.write((char) d);
                    // Check for EOF
                    if (d == -1)
                        break;
                    else
                        System.out.print ( (char) d);
                }
                text.flush();
                write.close();
0

Ja widzę co najmniej 1 błąd:

text.write((char) d);
if (d == -1)
    break;

Przyjrzyj się wyraźnie temu fragmentowi i zauważ, że ostatni znak(d==-1) traktuje on tak:

text.write((char) -1);
if (-1 == -1)
    break;

Czyli niepotrzebnie dopisujesz rzutowany na char znak o kodzie -1, czego efektem powinien być conajmniej wyjątek, a jeśli nawet nie jest, to niewłaściwy znak w pliku, albo nawet bałagan w całej jego konstrukcji. Przenieś write do instrukcji else.

0

ostatnio potrzebowałem ściągnąć sporo plików parsując źródło strony samo ściąganie wygląda tak:

private void download() {
    for (Iterator i = linki.iterator(); i.hasNext();)     {
        try {
            RandomAccessFile plik = null;
            String link =i.next().toString();
            String tmp[] = link.split("/");
            String nazwa = tmp[tmp.length-1];
            System.out.println("Pobieram: "+nazwa);
            plik = new RandomAccessFile(nazwa, "rw");
            URL u = new URL(link.trim());
            HttpURLConnection connection = (HttpURLConnection) u.openConnection();
            connection.connect();
            InputStream is = connection.getInputStream();
            int c=0;
            byte bufor[];
            bufor = new  byte[1];
            while((c = is.read(bufor)) != -1) {
               plik.write(bufor, 0, 1);
            }
            plik.close();
            is.close();
            connection.disconnect();
            } catch (Exception e) {
                System.out.println("Błąd"+e.getMessage());
        }
    }}

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