"Olá, amigo!"

"Oi, Ellie!"

"Você parece muito satisfeito consigo mesmo hoje."

"Heh, Bilaabo ficou doente."

"Então ele não poderia explicar um monte de coisas interessantes, úteis e necessárias para você. É hora de colocar suas calças de grande robô."

"Uh-huh. Eu prometo descobrir tudo sozinho. Bilaabo me deu um link."

"Ok, bom. Então vou te contar uma coisa interessante."

"Ou seja, como baixar vídeos da Internet."

"Para trabalhar com a Internet, o Java possui uma classe especial chamada URL. Veja como usar esta classe para baixar um arquivo:"

1) Primeiro, você precisa especificar a URL correta do servidor que você precisa.

2) Então você precisa usar a URL para estabelecer uma conexão com o servidor.

3) Em seguida, envie o corpo da solicitação se for uma solicitação POST. Ou você pode pular esta etapa se for uma solicitação GET.

4) Finalmente, leia a resposta do servidor.

"É assim que um simples download de arquivo se parece:"

Exemplo
URL url = new URL("https://www.google.com.ua/images/srpr/logo11w.png");
URLConnection connection = url.openConnection(); // Establish a connection

// Get an OutputStream in order to write the request to it
OutputStream outputStream = connection.getOutputStream();
outputStream.write(1);
outputStream.flush();

// Get an InputStream in order to read the response from it
InputStream inputStream = connection.getInputStream();
Files.copy(inputStream, new File("c:/google.png").toPath());

"Primeiro, estabelecemos uma conexão com o servidor obtendo um objeto URLConnection ."

"Em seguida, obtemos o OutputStream no qual a solicitação precisa ser gravada. E escrevemos algo nele."

"Em seguida, obtemos o objeto InputStream que representa a resposta, a partir do qual lemos a própria resposta. Usamos o método Files.copy para salvar os dados enviados no arquivo «c:/google.png»."

"Sim, entendo. O que é «escrever(1)»?"

"Bem, eu incluí isso para mostrar que você pode escrever algo lá. Na verdade, você não precisa escrever nada na solicitação para fazer o download do arquivo. Você pode obter imediatamente um InputStream e começar a ler a resposta a partir daí. O objeto URL ainda tem um método openStream() que retorna imediatamente um objeto InputStream. Mas isso só é adequado para solicitações GET. Por exemplo:"

Exemplo
URL url = new URL("https://www.google.com.ua/images/srpr/logo11w.png");
InputStream inputStream = url.openStream();
Files.copy(inputStream, new File("c:/google.png").toPath());

"Que interessante! Não pensei que baixar um arquivo fosse tão fácil."

"Bem, ninguém costuma fazer assim, já que os arquivos podem ser grandes e demorar muito para baixar."

"Existem alguns frameworks que simplificam muito o trabalho com arquivos, mas não estou pronto para falar sobre eles agora. Em outra ocasião."