Fazer download direto de um arquivo via protocolo HTTP

Bom dia amigos. Alguém sabe uma forma de baixar um arquivo via protocolo HTTP, mas que não seja feito através do browser? Queria que ele baixasse diretamente no disco tipo, copiar o arquivo de um servidor, via HTTP, para o HD.

Agradeço a todos por qualquer ajuda :thumbup:

    private void download() throws Exception {

        brProgresso.setIndeterminate(true);
        inStatus.setText("Fazendo Download");
        btDownload.setEnabled(false);

        SwingWorker sw = new SwingWorker() {

            @Override
            protected Object doInBackground() throws Exception {

                int buffer = 8 * 1024;

                URL from = new URL(parameters.get("files"));

                BufferedInputStream urlIn = new BufferedInputStream(
                        from.openConnection().getInputStream(), buffer);

                BufferedOutputStream outFile = new BufferedOutputStream(
                        new FileOutputStream(selectLocation()), buffer);

                writeToFile(urlIn, outFile, buffer);

                urlIn.close();
                outFile.close();

                return null;
            }

            @Override
            protected void done() {

                brProgresso.setIndeterminate(false);
                inStatus.setText("Terminado.");
                btDownload.setEnabled(true);
            }
        };

        sw.execute();
    }

    private void writeToFile(InputStream in, OutputStream out, int buffer)
            throws IOException {

        int read = -1;

        byte[] buf = new byte[buffer];

        while ((read = in.read(buf, 0, buffer)) >= 0) {
            out.write(buf, 0, read);
        }

        out.flush();
    }

Precisei fazer isso uma vez, o código ta meio zoado pq eh uma app antiga q fiz… Mas da um look pra ver se te ajudar…

wget?

Tu pode usar o wget:

Runtime.getRuntime().exec("wget -c http://urldoarquivo");

No windows não existe o wget nativamente, mas você pode baixá-lo e usar para executar a linha de código que eu passei. Você deve compilar a linha em uma classe e colocar o wget.exe no mesmo diretório do compilado da classe.

[quote=gregorioarthur][code]
private void download() throws Exception {

    brProgresso.setIndeterminate(true);
    inStatus.setText("Fazendo Download");
    btDownload.setEnabled(false);

    SwingWorker sw = new SwingWorker() {

        @Override
        protected Object doInBackground() throws Exception {

            int buffer = 8 * 1024;

            URL from = new URL(parameters.get("files"));

            BufferedInputStream urlIn = new BufferedInputStream(
                    from.openConnection().getInputStream(), buffer);

            BufferedOutputStream outFile = new BufferedOutputStream(
                    new FileOutputStream(selectLocation()), buffer);

            writeToFile(urlIn, outFile, buffer);

            urlIn.close();
            outFile.close();

            return null;
        }

        @Override
        protected void done() {

            brProgresso.setIndeterminate(false);
            inStatus.setText("Terminado.");
            btDownload.setEnabled(true);
        }
    };

    sw.execute();
}

private void writeToFile(InputStream in, OutputStream out, int buffer)
        throws IOException {

    int read = -1;

    byte[] buf = new byte[buffer];

    while ((read = in.read(buf, 0, buffer)) >= 0) {
        out.write(buf, 0, read);
    }

    out.flush();
}

[/code]

Precisei fazer isso uma vez, o código ta meio zoado pq eh uma app antiga q fiz… Mas da um look pra ver se te ajudar…[/quote]

O que seria esse objetos parameters?

eh parte do meu aplicativo…

Dei uma filtrada no código pra vc poder usar… segue abaixo:

package download;

import java.net.URL;

import java.io.*;

/**
 *
 * @author Arthur Gregorio
 *
 * @since 1.0
 * @version 1.0, 08/07/2011
 */
public class Download {

    public void getFrom(String url) throws IOException {
        
        int buffer = 8 * 1024;
        
        URL from = new URL(url);
        
        BufferedInputStream urlIn = new BufferedInputStream(
                from.openConnection().getInputStream(), buffer);
        
        BufferedOutputStream outFile = new BufferedOutputStream(
                new FileOutputStream(System.getProperty("user.home")), buffer);
        
        writeToFile(urlIn, outFile, buffer);
        
        urlIn.close();
        outFile.close();
    }

    private void writeToFile(InputStream in, OutputStream out, int buffer)
            throws IOException {

        int read = -1;

        byte[] buf = new byte[buffer];

        while ((read = in.read(buf, 0, buffer)) >= 0) {
            out.write(buf, 0, read);
        }

        out.flush();
    }
}

falow!