Provavelmente vc usará a API java.io para ler/escrever em arquivos. E usar a API java.net com Sockets para enviar/receber os streams de bytes. Básicamente o uploader le uma sequencia de bytes do arquivo e o downloader recebe essa stream de bytes e escreve no arquivo em sua máquina.
flw