Ok.
Posto che il percorso in cui salvare il file deciderai tu come ottenerlo (fisso, da chiedere all'utente tramite textbox, da chiedere tramite JFileChooser, ...) alla fine avrai una stringa o un oggetto File che rappresenta il percorso di destinazione (nell'esempio qui sotto è una stringa che rappresenta un percorso, quindi terminata dal separatore di percorso).
Non ti rimane altro da fare che leggere, a blocchi di N bytes (deciderai tu quanti byte alla volta), la risorsa che c'è sul server (il tuo file) e scriverlo quindi nel file system dell'utente.
codice:
String doveSalvare = ...; // Qui avrai il percorso in cui salvare (che sarà terminato dal separatore di percorso)
String nomeDelFile = ...; // Questo sarà il nome del file da creare
byte[] buffer = new byte[N]; // Il famoso blocco di N bytes
// Questo sarà l'URL del tuo file da salvare (quello presente sul server)
URL risorsa = new URL("http://www.tuosito.it/percorso/al/file/sul/server");
// Ottengo lo stream di input della risorsa
InputStream input = risorsa.openStream();
// Creo il file sul disco dell'utente
FileOutputStream output = new FileOutputStream(doveSalvare + nomeDelFile);
int byteLetti = 0;
while((byteLetti = input.read(buffer)) >= 0) {
output.write(buffer, 0, byteLetti);
output.flush();
}
// Chiudo il file sul disco dell'utente
output.close();
// Chiudo la risorsa sul server
input.close();
Chiaramente vanno gestite le eccezioni, che qui ho tralasciato.
Alla fine di questa operazione potresti visualizzare un messaggio all'utente per informarlo dell'avvenuto salvataggio.
Ciao.